Merge remote-tracking branch 'origin/v2' into mcp-prompts
# Conflicts: # packages/core/src/mcp/client.ts # packages/core/src/mcp/index.ts
This commit is contained in:
commit
118bf05f32
155 changed files with 7843 additions and 2606 deletions
|
|
@ -1,16 +1,17 @@
|
|||
import { NodeFileSystem } from "@effect/platform-node"
|
||||
import { compile, emitEffectImported, emitPromise, write } from "@opencode-ai/httpapi-codegen"
|
||||
import { ClientApi, endpointNames, groupNames, omitEndpoints } from "../src/contract"
|
||||
import { ClientApi, effectOmitEndpoints, endpointNames, groupNames, promiseOmitEndpoints } from "../src/contract"
|
||||
import { Effect } from "effect"
|
||||
import { fileURLToPath } from "url"
|
||||
|
||||
const contract = compile(ClientApi, { groupNames, endpointNames, omitEndpoints })
|
||||
const promiseContract = compile(ClientApi, { groupNames, endpointNames, omitEndpoints: promiseOmitEndpoints })
|
||||
const effectContract = compile(ClientApi, { groupNames, endpointNames, omitEndpoints: effectOmitEndpoints })
|
||||
|
||||
await Effect.runPromise(
|
||||
Effect.all(
|
||||
[
|
||||
write(
|
||||
emitPromise(contract, {
|
||||
emitPromise(promiseContract, {
|
||||
outputTypes: {
|
||||
"events.subscribe": {
|
||||
name: "OpenCodeEventEncoded",
|
||||
|
|
@ -21,7 +22,7 @@ await Effect.runPromise(
|
|||
fileURLToPath(new URL("../src/generated", import.meta.url)),
|
||||
),
|
||||
write(
|
||||
emitEffectImported(contract, { module: "../contract", api: "ClientApi" }),
|
||||
emitEffectImported(effectContract, { module: "../contract", api: "ClientApi" }),
|
||||
fileURLToPath(new URL("../src/generated-effect", import.meta.url)),
|
||||
),
|
||||
],
|
||||
|
|
|
|||
|
|
@ -19,23 +19,25 @@ export const ClientApi = makeDefaultApi({
|
|||
export const groupNames = {
|
||||
"server.health": "health",
|
||||
"server.location": "location",
|
||||
"server.agent": "agents",
|
||||
"server.session": "sessions",
|
||||
"server.message": "messages",
|
||||
"server.model": "models",
|
||||
"server.agent": "agent",
|
||||
"server.session": "session",
|
||||
"server.message": "message",
|
||||
"server.model": "model",
|
||||
"server.generate": "generate",
|
||||
"server.provider": "providers",
|
||||
"server.integration": "integrations",
|
||||
"server.credential": "credentials",
|
||||
"server.permission": "permissions",
|
||||
"server.fs": "files",
|
||||
"server.command": "commands",
|
||||
"server.skill": "skills",
|
||||
"server.event": "events",
|
||||
"server.pty": "ptys",
|
||||
"server.question": "questions",
|
||||
"server.reference": "references",
|
||||
"server.projectCopy": "projectCopies",
|
||||
"server.provider": "provider",
|
||||
"server.integration": "integration",
|
||||
"server.credential": "credential",
|
||||
"server.permission": "permission",
|
||||
"server.fs": "file",
|
||||
"server.command": "command",
|
||||
"server.skill": "skill",
|
||||
"server.event": "event",
|
||||
"server.pty": "pty",
|
||||
"server.shell": "shell",
|
||||
"server.question": "question",
|
||||
"server.reference": "reference",
|
||||
"server.project": "project",
|
||||
"server.projectCopy": "projectCopy",
|
||||
} as const
|
||||
|
||||
export const endpointNames = {
|
||||
|
|
@ -51,4 +53,5 @@ export const endpointNames = {
|
|||
"question.request.list": "listRequests",
|
||||
} as const
|
||||
|
||||
export const omitEndpoints = new Set(["fs.read", "pty.connect", "pty.connectToken"])
|
||||
export const promiseOmitEndpoints = new Set(["pty.connect", "pty.connectToken"])
|
||||
export const effectOmitEndpoints = new Set(["fs.read", "pty.connect", "pty.connectToken"])
|
||||
|
|
|
|||
|
|
@ -86,45 +86,56 @@ const Endpoint3_3 = (raw: RawClient["server.session"]) => (input: Endpoint3_3Inp
|
|||
Effect.map((value) => value.data),
|
||||
)
|
||||
|
||||
type Endpoint3_4Request = Parameters<RawClient["server.session"]["session.switchAgent"]>[0]
|
||||
type Endpoint3_4Request = Parameters<RawClient["server.session"]["session.fork"]>[0]
|
||||
type Endpoint3_4Input = {
|
||||
readonly sessionID: Endpoint3_4Request["params"]["sessionID"]
|
||||
readonly agent: Endpoint3_4Request["payload"]["agent"]
|
||||
readonly messageID?: Endpoint3_4Request["payload"]["messageID"]
|
||||
}
|
||||
const Endpoint3_4 = (raw: RawClient["server.session"]) => (input: Endpoint3_4Input) =>
|
||||
raw["session.fork"]({ params: { sessionID: input["sessionID"] }, payload: { messageID: input["messageID"] } }).pipe(
|
||||
Effect.mapError(mapClientError),
|
||||
Effect.map((value) => value.data),
|
||||
)
|
||||
|
||||
type Endpoint3_5Request = Parameters<RawClient["server.session"]["session.switchAgent"]>[0]
|
||||
type Endpoint3_5Input = {
|
||||
readonly sessionID: Endpoint3_5Request["params"]["sessionID"]
|
||||
readonly agent: Endpoint3_5Request["payload"]["agent"]
|
||||
}
|
||||
const Endpoint3_5 = (raw: RawClient["server.session"]) => (input: Endpoint3_5Input) =>
|
||||
raw["session.switchAgent"]({ params: { sessionID: input["sessionID"] }, payload: { agent: input["agent"] } }).pipe(
|
||||
Effect.mapError(mapClientError),
|
||||
)
|
||||
|
||||
type Endpoint3_5Request = Parameters<RawClient["server.session"]["session.switchModel"]>[0]
|
||||
type Endpoint3_5Input = {
|
||||
readonly sessionID: Endpoint3_5Request["params"]["sessionID"]
|
||||
readonly model: Endpoint3_5Request["payload"]["model"]
|
||||
type Endpoint3_6Request = Parameters<RawClient["server.session"]["session.switchModel"]>[0]
|
||||
type Endpoint3_6Input = {
|
||||
readonly sessionID: Endpoint3_6Request["params"]["sessionID"]
|
||||
readonly model: Endpoint3_6Request["payload"]["model"]
|
||||
}
|
||||
const Endpoint3_5 = (raw: RawClient["server.session"]) => (input: Endpoint3_5Input) =>
|
||||
const Endpoint3_6 = (raw: RawClient["server.session"]) => (input: Endpoint3_6Input) =>
|
||||
raw["session.switchModel"]({ params: { sessionID: input["sessionID"] }, payload: { model: input["model"] } }).pipe(
|
||||
Effect.mapError(mapClientError),
|
||||
)
|
||||
|
||||
type Endpoint3_6Request = Parameters<RawClient["server.session"]["session.rename"]>[0]
|
||||
type Endpoint3_6Input = {
|
||||
readonly sessionID: Endpoint3_6Request["params"]["sessionID"]
|
||||
readonly title: Endpoint3_6Request["payload"]["title"]
|
||||
type Endpoint3_7Request = Parameters<RawClient["server.session"]["session.rename"]>[0]
|
||||
type Endpoint3_7Input = {
|
||||
readonly sessionID: Endpoint3_7Request["params"]["sessionID"]
|
||||
readonly title: Endpoint3_7Request["payload"]["title"]
|
||||
}
|
||||
const Endpoint3_6 = (raw: RawClient["server.session"]) => (input: Endpoint3_6Input) =>
|
||||
const Endpoint3_7 = (raw: RawClient["server.session"]) => (input: Endpoint3_7Input) =>
|
||||
raw["session.rename"]({ params: { sessionID: input["sessionID"] }, payload: { title: input["title"] } }).pipe(
|
||||
Effect.mapError(mapClientError),
|
||||
)
|
||||
|
||||
type Endpoint3_7Request = Parameters<RawClient["server.session"]["session.prompt"]>[0]
|
||||
type Endpoint3_7Input = {
|
||||
readonly sessionID: Endpoint3_7Request["params"]["sessionID"]
|
||||
readonly id?: Endpoint3_7Request["payload"]["id"]
|
||||
readonly prompt: Endpoint3_7Request["payload"]["prompt"]
|
||||
readonly delivery?: Endpoint3_7Request["payload"]["delivery"]
|
||||
readonly resume?: Endpoint3_7Request["payload"]["resume"]
|
||||
type Endpoint3_8Request = Parameters<RawClient["server.session"]["session.prompt"]>[0]
|
||||
type Endpoint3_8Input = {
|
||||
readonly sessionID: Endpoint3_8Request["params"]["sessionID"]
|
||||
readonly id?: Endpoint3_8Request["payload"]["id"]
|
||||
readonly prompt: Endpoint3_8Request["payload"]["prompt"]
|
||||
readonly delivery?: Endpoint3_8Request["payload"]["delivery"]
|
||||
readonly resume?: Endpoint3_8Request["payload"]["resume"]
|
||||
}
|
||||
const Endpoint3_7 = (raw: RawClient["server.session"]) => (input: Endpoint3_7Input) =>
|
||||
const Endpoint3_8 = (raw: RawClient["server.session"]) => (input: Endpoint3_8Input) =>
|
||||
raw["session.prompt"]({
|
||||
params: { sessionID: input["sessionID"] },
|
||||
payload: { id: input["id"], prompt: input["prompt"], delivery: input["delivery"], resume: input["resume"] },
|
||||
|
|
@ -133,23 +144,36 @@ const Endpoint3_7 = (raw: RawClient["server.session"]) => (input: Endpoint3_7Inp
|
|||
Effect.map((value) => value.data),
|
||||
)
|
||||
|
||||
type Endpoint3_8Request = Parameters<RawClient["server.session"]["session.compact"]>[0]
|
||||
type Endpoint3_8Input = { readonly sessionID: Endpoint3_8Request["params"]["sessionID"] }
|
||||
const Endpoint3_8 = (raw: RawClient["server.session"]) => (input: Endpoint3_8Input) =>
|
||||
type Endpoint3_9Request = Parameters<RawClient["server.session"]["session.skill"]>[0]
|
||||
type Endpoint3_9Input = {
|
||||
readonly sessionID: Endpoint3_9Request["params"]["sessionID"]
|
||||
readonly id?: Endpoint3_9Request["payload"]["id"]
|
||||
readonly skill: Endpoint3_9Request["payload"]["skill"]
|
||||
readonly resume?: Endpoint3_9Request["payload"]["resume"]
|
||||
}
|
||||
const Endpoint3_9 = (raw: RawClient["server.session"]) => (input: Endpoint3_9Input) =>
|
||||
raw["session.skill"]({
|
||||
params: { sessionID: input["sessionID"] },
|
||||
payload: { id: input["id"], skill: input["skill"], resume: input["resume"] },
|
||||
}).pipe(Effect.mapError(mapClientError))
|
||||
|
||||
type Endpoint3_10Request = Parameters<RawClient["server.session"]["session.compact"]>[0]
|
||||
type Endpoint3_10Input = { readonly sessionID: Endpoint3_10Request["params"]["sessionID"] }
|
||||
const Endpoint3_10 = (raw: RawClient["server.session"]) => (input: Endpoint3_10Input) =>
|
||||
raw["session.compact"]({ params: { sessionID: input["sessionID"] } }).pipe(Effect.mapError(mapClientError))
|
||||
|
||||
type Endpoint3_9Request = Parameters<RawClient["server.session"]["session.wait"]>[0]
|
||||
type Endpoint3_9Input = { readonly sessionID: Endpoint3_9Request["params"]["sessionID"] }
|
||||
const Endpoint3_9 = (raw: RawClient["server.session"]) => (input: Endpoint3_9Input) =>
|
||||
type Endpoint3_11Request = Parameters<RawClient["server.session"]["session.wait"]>[0]
|
||||
type Endpoint3_11Input = { readonly sessionID: Endpoint3_11Request["params"]["sessionID"] }
|
||||
const Endpoint3_11 = (raw: RawClient["server.session"]) => (input: Endpoint3_11Input) =>
|
||||
raw["session.wait"]({ params: { sessionID: input["sessionID"] } }).pipe(Effect.mapError(mapClientError))
|
||||
|
||||
type Endpoint3_10Request = Parameters<RawClient["server.session"]["session.revert.stage"]>[0]
|
||||
type Endpoint3_10Input = {
|
||||
readonly sessionID: Endpoint3_10Request["params"]["sessionID"]
|
||||
readonly messageID: Endpoint3_10Request["payload"]["messageID"]
|
||||
readonly files?: Endpoint3_10Request["payload"]["files"]
|
||||
type Endpoint3_12Request = Parameters<RawClient["server.session"]["session.revert.stage"]>[0]
|
||||
type Endpoint3_12Input = {
|
||||
readonly sessionID: Endpoint3_12Request["params"]["sessionID"]
|
||||
readonly messageID: Endpoint3_12Request["payload"]["messageID"]
|
||||
readonly files?: Endpoint3_12Request["payload"]["files"]
|
||||
}
|
||||
const Endpoint3_10 = (raw: RawClient["server.session"]) => (input: Endpoint3_10Input) =>
|
||||
const Endpoint3_12 = (raw: RawClient["server.session"]) => (input: Endpoint3_12Input) =>
|
||||
raw["session.revert.stage"]({
|
||||
params: { sessionID: input["sessionID"] },
|
||||
payload: { messageID: input["messageID"], files: input["files"] },
|
||||
|
|
@ -158,42 +182,42 @@ const Endpoint3_10 = (raw: RawClient["server.session"]) => (input: Endpoint3_10I
|
|||
Effect.map((value) => value.data),
|
||||
)
|
||||
|
||||
type Endpoint3_11Request = Parameters<RawClient["server.session"]["session.revert.clear"]>[0]
|
||||
type Endpoint3_11Input = { readonly sessionID: Endpoint3_11Request["params"]["sessionID"] }
|
||||
const Endpoint3_11 = (raw: RawClient["server.session"]) => (input: Endpoint3_11Input) =>
|
||||
raw["session.revert.clear"]({ params: { sessionID: input["sessionID"] } }).pipe(Effect.mapError(mapClientError))
|
||||
|
||||
type Endpoint3_12Request = Parameters<RawClient["server.session"]["session.revert.commit"]>[0]
|
||||
type Endpoint3_12Input = { readonly sessionID: Endpoint3_12Request["params"]["sessionID"] }
|
||||
const Endpoint3_12 = (raw: RawClient["server.session"]) => (input: Endpoint3_12Input) =>
|
||||
raw["session.revert.commit"]({ params: { sessionID: input["sessionID"] } }).pipe(Effect.mapError(mapClientError))
|
||||
|
||||
type Endpoint3_13Request = Parameters<RawClient["server.session"]["session.context"]>[0]
|
||||
type Endpoint3_13Request = Parameters<RawClient["server.session"]["session.revert.clear"]>[0]
|
||||
type Endpoint3_13Input = { readonly sessionID: Endpoint3_13Request["params"]["sessionID"] }
|
||||
const Endpoint3_13 = (raw: RawClient["server.session"]) => (input: Endpoint3_13Input) =>
|
||||
raw["session.revert.clear"]({ params: { sessionID: input["sessionID"] } }).pipe(Effect.mapError(mapClientError))
|
||||
|
||||
type Endpoint3_14Request = Parameters<RawClient["server.session"]["session.revert.commit"]>[0]
|
||||
type Endpoint3_14Input = { readonly sessionID: Endpoint3_14Request["params"]["sessionID"] }
|
||||
const Endpoint3_14 = (raw: RawClient["server.session"]) => (input: Endpoint3_14Input) =>
|
||||
raw["session.revert.commit"]({ params: { sessionID: input["sessionID"] } }).pipe(Effect.mapError(mapClientError))
|
||||
|
||||
type Endpoint3_15Request = Parameters<RawClient["server.session"]["session.context"]>[0]
|
||||
type Endpoint3_15Input = { readonly sessionID: Endpoint3_15Request["params"]["sessionID"] }
|
||||
const Endpoint3_15 = (raw: RawClient["server.session"]) => (input: Endpoint3_15Input) =>
|
||||
raw["session.context"]({ params: { sessionID: input["sessionID"] } }).pipe(
|
||||
Effect.mapError(mapClientError),
|
||||
Effect.map((value) => value.data),
|
||||
)
|
||||
|
||||
type Endpoint3_14Request = Parameters<RawClient["server.session"]["session.history"]>[0]
|
||||
type Endpoint3_14Input = {
|
||||
readonly sessionID: Endpoint3_14Request["params"]["sessionID"]
|
||||
readonly limit?: Endpoint3_14Request["query"]["limit"]
|
||||
readonly after?: Endpoint3_14Request["query"]["after"]
|
||||
type Endpoint3_16Request = Parameters<RawClient["server.session"]["session.history"]>[0]
|
||||
type Endpoint3_16Input = {
|
||||
readonly sessionID: Endpoint3_16Request["params"]["sessionID"]
|
||||
readonly limit?: Endpoint3_16Request["query"]["limit"]
|
||||
readonly after?: Endpoint3_16Request["query"]["after"]
|
||||
}
|
||||
const Endpoint3_14 = (raw: RawClient["server.session"]) => (input: Endpoint3_14Input) =>
|
||||
const Endpoint3_16 = (raw: RawClient["server.session"]) => (input: Endpoint3_16Input) =>
|
||||
raw["session.history"]({
|
||||
params: { sessionID: input["sessionID"] },
|
||||
query: { limit: input["limit"], after: input["after"] },
|
||||
}).pipe(Effect.mapError(mapClientError))
|
||||
|
||||
type Endpoint3_15Request = Parameters<RawClient["server.session"]["session.events"]>[0]
|
||||
type Endpoint3_15Input = {
|
||||
readonly sessionID: Endpoint3_15Request["params"]["sessionID"]
|
||||
readonly after?: Endpoint3_15Request["query"]["after"]
|
||||
type Endpoint3_17Request = Parameters<RawClient["server.session"]["session.events"]>[0]
|
||||
type Endpoint3_17Input = {
|
||||
readonly sessionID: Endpoint3_17Request["params"]["sessionID"]
|
||||
readonly after?: Endpoint3_17Request["query"]["after"]
|
||||
}
|
||||
const Endpoint3_15 = (raw: RawClient["server.session"]) => (input: Endpoint3_15Input) =>
|
||||
const Endpoint3_17 = (raw: RawClient["server.session"]) => (input: Endpoint3_17Input) =>
|
||||
Stream.unwrap(
|
||||
raw["session.events"]({ params: { sessionID: input["sessionID"] }, query: { after: input["after"] } }).pipe(
|
||||
Effect.mapError(mapClientError),
|
||||
|
|
@ -201,17 +225,17 @@ const Endpoint3_15 = (raw: RawClient["server.session"]) => (input: Endpoint3_15I
|
|||
),
|
||||
)
|
||||
|
||||
type Endpoint3_16Request = Parameters<RawClient["server.session"]["session.interrupt"]>[0]
|
||||
type Endpoint3_16Input = { readonly sessionID: Endpoint3_16Request["params"]["sessionID"] }
|
||||
const Endpoint3_16 = (raw: RawClient["server.session"]) => (input: Endpoint3_16Input) =>
|
||||
type Endpoint3_18Request = Parameters<RawClient["server.session"]["session.interrupt"]>[0]
|
||||
type Endpoint3_18Input = { readonly sessionID: Endpoint3_18Request["params"]["sessionID"] }
|
||||
const Endpoint3_18 = (raw: RawClient["server.session"]) => (input: Endpoint3_18Input) =>
|
||||
raw["session.interrupt"]({ params: { sessionID: input["sessionID"] } }).pipe(Effect.mapError(mapClientError))
|
||||
|
||||
type Endpoint3_17Request = Parameters<RawClient["server.session"]["session.message"]>[0]
|
||||
type Endpoint3_17Input = {
|
||||
readonly sessionID: Endpoint3_17Request["params"]["sessionID"]
|
||||
readonly messageID: Endpoint3_17Request["params"]["messageID"]
|
||||
type Endpoint3_19Request = Parameters<RawClient["server.session"]["session.message"]>[0]
|
||||
type Endpoint3_19Input = {
|
||||
readonly sessionID: Endpoint3_19Request["params"]["sessionID"]
|
||||
readonly messageID: Endpoint3_19Request["params"]["messageID"]
|
||||
}
|
||||
const Endpoint3_17 = (raw: RawClient["server.session"]) => (input: Endpoint3_17Input) =>
|
||||
const Endpoint3_19 = (raw: RawClient["server.session"]) => (input: Endpoint3_19Input) =>
|
||||
raw["session.message"]({ params: { sessionID: input["sessionID"], messageID: input["messageID"] } }).pipe(
|
||||
Effect.mapError(mapClientError),
|
||||
Effect.map((value) => value.data),
|
||||
|
|
@ -222,20 +246,22 @@ const adaptGroup3 = (raw: RawClient["server.session"]) => ({
|
|||
create: Endpoint3_1(raw),
|
||||
active: Endpoint3_2(raw),
|
||||
get: Endpoint3_3(raw),
|
||||
switchAgent: Endpoint3_4(raw),
|
||||
switchModel: Endpoint3_5(raw),
|
||||
rename: Endpoint3_6(raw),
|
||||
prompt: Endpoint3_7(raw),
|
||||
compact: Endpoint3_8(raw),
|
||||
wait: Endpoint3_9(raw),
|
||||
stage: Endpoint3_10(raw),
|
||||
clear: Endpoint3_11(raw),
|
||||
commit: Endpoint3_12(raw),
|
||||
context: Endpoint3_13(raw),
|
||||
history: Endpoint3_14(raw),
|
||||
events: Endpoint3_15(raw),
|
||||
interrupt: Endpoint3_16(raw),
|
||||
message: Endpoint3_17(raw),
|
||||
fork: Endpoint3_4(raw),
|
||||
switchAgent: Endpoint3_5(raw),
|
||||
switchModel: Endpoint3_6(raw),
|
||||
rename: Endpoint3_7(raw),
|
||||
prompt: Endpoint3_8(raw),
|
||||
skill: Endpoint3_9(raw),
|
||||
compact: Endpoint3_10(raw),
|
||||
wait: Endpoint3_11(raw),
|
||||
stage: Endpoint3_12(raw),
|
||||
clear: Endpoint3_13(raw),
|
||||
commit: Endpoint3_14(raw),
|
||||
context: Endpoint3_15(raw),
|
||||
history: Endpoint3_16(raw),
|
||||
events: Endpoint3_17(raw),
|
||||
interrupt: Endpoint3_18(raw),
|
||||
message: Endpoint3_19(raw),
|
||||
})
|
||||
|
||||
type Endpoint4_0Request = Parameters<RawClient["server.message"]["session.messages"]>[0]
|
||||
|
|
@ -384,62 +410,90 @@ const adaptGroup8 = (raw: RawClient["server.integration"]) => ({
|
|||
attemptCancel: Endpoint8_6(raw),
|
||||
})
|
||||
|
||||
type Endpoint9_0Request = Parameters<RawClient["server.credential"]["credential.update"]>[0]
|
||||
type Endpoint9_0Input = {
|
||||
readonly credentialID: Endpoint9_0Request["params"]["credentialID"]
|
||||
readonly location?: Endpoint9_0Request["query"]["location"]
|
||||
readonly label: Endpoint9_0Request["payload"]["label"]
|
||||
type Endpoint9_0Request = Parameters<RawClient["server.mcp"]["mcp.list"]>[0]
|
||||
type Endpoint9_0Input = { readonly location?: Endpoint9_0Request["query"]["location"] }
|
||||
const Endpoint9_0 = (raw: RawClient["server.mcp"]) => (input?: Endpoint9_0Input) =>
|
||||
raw["mcp.list"]({ query: { location: input?.["location"] } }).pipe(Effect.mapError(mapClientError))
|
||||
|
||||
const adaptGroup9 = (raw: RawClient["server.mcp"]) => ({ list: Endpoint9_0(raw) })
|
||||
|
||||
type Endpoint10_0Request = Parameters<RawClient["server.credential"]["credential.update"]>[0]
|
||||
type Endpoint10_0Input = {
|
||||
readonly credentialID: Endpoint10_0Request["params"]["credentialID"]
|
||||
readonly location?: Endpoint10_0Request["query"]["location"]
|
||||
readonly label: Endpoint10_0Request["payload"]["label"]
|
||||
}
|
||||
const Endpoint9_0 = (raw: RawClient["server.credential"]) => (input: Endpoint9_0Input) =>
|
||||
const Endpoint10_0 = (raw: RawClient["server.credential"]) => (input: Endpoint10_0Input) =>
|
||||
raw["credential.update"]({
|
||||
params: { credentialID: input["credentialID"] },
|
||||
query: { location: input["location"] },
|
||||
payload: { label: input["label"] },
|
||||
}).pipe(Effect.mapError(mapClientError))
|
||||
|
||||
type Endpoint9_1Request = Parameters<RawClient["server.credential"]["credential.remove"]>[0]
|
||||
type Endpoint9_1Input = {
|
||||
readonly credentialID: Endpoint9_1Request["params"]["credentialID"]
|
||||
readonly location?: Endpoint9_1Request["query"]["location"]
|
||||
type Endpoint10_1Request = Parameters<RawClient["server.credential"]["credential.remove"]>[0]
|
||||
type Endpoint10_1Input = {
|
||||
readonly credentialID: Endpoint10_1Request["params"]["credentialID"]
|
||||
readonly location?: Endpoint10_1Request["query"]["location"]
|
||||
}
|
||||
const Endpoint9_1 = (raw: RawClient["server.credential"]) => (input: Endpoint9_1Input) =>
|
||||
const Endpoint10_1 = (raw: RawClient["server.credential"]) => (input: Endpoint10_1Input) =>
|
||||
raw["credential.remove"]({
|
||||
params: { credentialID: input["credentialID"] },
|
||||
query: { location: input["location"] },
|
||||
}).pipe(Effect.mapError(mapClientError))
|
||||
|
||||
const adaptGroup9 = (raw: RawClient["server.credential"]) => ({ update: Endpoint9_0(raw), remove: Endpoint9_1(raw) })
|
||||
const adaptGroup10 = (raw: RawClient["server.credential"]) => ({ update: Endpoint10_0(raw), remove: Endpoint10_1(raw) })
|
||||
|
||||
type Endpoint10_0Request = Parameters<RawClient["server.permission"]["permission.request.list"]>[0]
|
||||
type Endpoint10_0Input = { readonly location?: Endpoint10_0Request["query"]["location"] }
|
||||
const Endpoint10_0 = (raw: RawClient["server.permission"]) => (input?: Endpoint10_0Input) =>
|
||||
type Endpoint11_0Request = Parameters<RawClient["server.project"]["project.current"]>[0]
|
||||
type Endpoint11_0Input = { readonly location?: Endpoint11_0Request["query"]["location"] }
|
||||
const Endpoint11_0 = (raw: RawClient["server.project"]) => (input?: Endpoint11_0Input) =>
|
||||
raw["project.current"]({ query: { location: input?.["location"] } }).pipe(Effect.mapError(mapClientError))
|
||||
|
||||
type Endpoint11_1Request = Parameters<RawClient["server.project"]["project.directories"]>[0]
|
||||
type Endpoint11_1Input = {
|
||||
readonly projectID: Endpoint11_1Request["params"]["projectID"]
|
||||
readonly location?: Endpoint11_1Request["query"]["location"]
|
||||
}
|
||||
const Endpoint11_1 = (raw: RawClient["server.project"]) => (input: Endpoint11_1Input) =>
|
||||
raw["project.directories"]({
|
||||
params: { projectID: input["projectID"] },
|
||||
query: { location: input["location"] },
|
||||
}).pipe(Effect.mapError(mapClientError))
|
||||
|
||||
const adaptGroup11 = (raw: RawClient["server.project"]) => ({
|
||||
current: Endpoint11_0(raw),
|
||||
directories: Endpoint11_1(raw),
|
||||
})
|
||||
|
||||
type Endpoint12_0Request = Parameters<RawClient["server.permission"]["permission.request.list"]>[0]
|
||||
type Endpoint12_0Input = { readonly location?: Endpoint12_0Request["query"]["location"] }
|
||||
const Endpoint12_0 = (raw: RawClient["server.permission"]) => (input?: Endpoint12_0Input) =>
|
||||
raw["permission.request.list"]({ query: { location: input?.["location"] } }).pipe(Effect.mapError(mapClientError))
|
||||
|
||||
type Endpoint10_1Request = Parameters<RawClient["server.permission"]["permission.saved.list"]>[0]
|
||||
type Endpoint10_1Input = { readonly projectID?: Endpoint10_1Request["query"]["projectID"] }
|
||||
const Endpoint10_1 = (raw: RawClient["server.permission"]) => (input?: Endpoint10_1Input) =>
|
||||
type Endpoint12_1Request = Parameters<RawClient["server.permission"]["permission.saved.list"]>[0]
|
||||
type Endpoint12_1Input = { readonly projectID?: Endpoint12_1Request["query"]["projectID"] }
|
||||
const Endpoint12_1 = (raw: RawClient["server.permission"]) => (input?: Endpoint12_1Input) =>
|
||||
raw["permission.saved.list"]({ query: { projectID: input?.["projectID"] } }).pipe(
|
||||
Effect.mapError(mapClientError),
|
||||
Effect.map((value) => value.data),
|
||||
)
|
||||
|
||||
type Endpoint10_2Request = Parameters<RawClient["server.permission"]["permission.saved.remove"]>[0]
|
||||
type Endpoint10_2Input = { readonly id: Endpoint10_2Request["params"]["id"] }
|
||||
const Endpoint10_2 = (raw: RawClient["server.permission"]) => (input: Endpoint10_2Input) =>
|
||||
type Endpoint12_2Request = Parameters<RawClient["server.permission"]["permission.saved.remove"]>[0]
|
||||
type Endpoint12_2Input = { readonly id: Endpoint12_2Request["params"]["id"] }
|
||||
const Endpoint12_2 = (raw: RawClient["server.permission"]) => (input: Endpoint12_2Input) =>
|
||||
raw["permission.saved.remove"]({ params: { id: input["id"] } }).pipe(Effect.mapError(mapClientError))
|
||||
|
||||
type Endpoint10_3Request = Parameters<RawClient["server.permission"]["session.permission.create"]>[0]
|
||||
type Endpoint10_3Input = {
|
||||
readonly sessionID: Endpoint10_3Request["params"]["sessionID"]
|
||||
readonly id?: Endpoint10_3Request["payload"]["id"]
|
||||
readonly action: Endpoint10_3Request["payload"]["action"]
|
||||
readonly resources: Endpoint10_3Request["payload"]["resources"]
|
||||
readonly save?: Endpoint10_3Request["payload"]["save"]
|
||||
readonly metadata?: Endpoint10_3Request["payload"]["metadata"]
|
||||
readonly source?: Endpoint10_3Request["payload"]["source"]
|
||||
readonly agent?: Endpoint10_3Request["payload"]["agent"]
|
||||
type Endpoint12_3Request = Parameters<RawClient["server.permission"]["session.permission.create"]>[0]
|
||||
type Endpoint12_3Input = {
|
||||
readonly sessionID: Endpoint12_3Request["params"]["sessionID"]
|
||||
readonly id?: Endpoint12_3Request["payload"]["id"]
|
||||
readonly action: Endpoint12_3Request["payload"]["action"]
|
||||
readonly resources: Endpoint12_3Request["payload"]["resources"]
|
||||
readonly save?: Endpoint12_3Request["payload"]["save"]
|
||||
readonly metadata?: Endpoint12_3Request["payload"]["metadata"]
|
||||
readonly source?: Endpoint12_3Request["payload"]["source"]
|
||||
readonly agent?: Endpoint12_3Request["payload"]["agent"]
|
||||
}
|
||||
const Endpoint10_3 = (raw: RawClient["server.permission"]) => (input: Endpoint10_3Input) =>
|
||||
const Endpoint12_3 = (raw: RawClient["server.permission"]) => (input: Endpoint12_3Input) =>
|
||||
raw["session.permission.create"]({
|
||||
params: { sessionID: input["sessionID"] },
|
||||
payload: {
|
||||
|
|
@ -456,87 +510,87 @@ const Endpoint10_3 = (raw: RawClient["server.permission"]) => (input: Endpoint10
|
|||
Effect.map((value) => value.data),
|
||||
)
|
||||
|
||||
type Endpoint10_4Request = Parameters<RawClient["server.permission"]["session.permission.list"]>[0]
|
||||
type Endpoint10_4Input = { readonly sessionID: Endpoint10_4Request["params"]["sessionID"] }
|
||||
const Endpoint10_4 = (raw: RawClient["server.permission"]) => (input: Endpoint10_4Input) =>
|
||||
type Endpoint12_4Request = Parameters<RawClient["server.permission"]["session.permission.list"]>[0]
|
||||
type Endpoint12_4Input = { readonly sessionID: Endpoint12_4Request["params"]["sessionID"] }
|
||||
const Endpoint12_4 = (raw: RawClient["server.permission"]) => (input: Endpoint12_4Input) =>
|
||||
raw["session.permission.list"]({ params: { sessionID: input["sessionID"] } }).pipe(
|
||||
Effect.mapError(mapClientError),
|
||||
Effect.map((value) => value.data),
|
||||
)
|
||||
|
||||
type Endpoint10_5Request = Parameters<RawClient["server.permission"]["session.permission.get"]>[0]
|
||||
type Endpoint10_5Input = {
|
||||
readonly sessionID: Endpoint10_5Request["params"]["sessionID"]
|
||||
readonly requestID: Endpoint10_5Request["params"]["requestID"]
|
||||
type Endpoint12_5Request = Parameters<RawClient["server.permission"]["session.permission.get"]>[0]
|
||||
type Endpoint12_5Input = {
|
||||
readonly sessionID: Endpoint12_5Request["params"]["sessionID"]
|
||||
readonly requestID: Endpoint12_5Request["params"]["requestID"]
|
||||
}
|
||||
const Endpoint10_5 = (raw: RawClient["server.permission"]) => (input: Endpoint10_5Input) =>
|
||||
const Endpoint12_5 = (raw: RawClient["server.permission"]) => (input: Endpoint12_5Input) =>
|
||||
raw["session.permission.get"]({ params: { sessionID: input["sessionID"], requestID: input["requestID"] } }).pipe(
|
||||
Effect.mapError(mapClientError),
|
||||
Effect.map((value) => value.data),
|
||||
)
|
||||
|
||||
type Endpoint10_6Request = Parameters<RawClient["server.permission"]["session.permission.reply"]>[0]
|
||||
type Endpoint10_6Input = {
|
||||
readonly sessionID: Endpoint10_6Request["params"]["sessionID"]
|
||||
readonly requestID: Endpoint10_6Request["params"]["requestID"]
|
||||
readonly reply: Endpoint10_6Request["payload"]["reply"]
|
||||
readonly message?: Endpoint10_6Request["payload"]["message"]
|
||||
type Endpoint12_6Request = Parameters<RawClient["server.permission"]["session.permission.reply"]>[0]
|
||||
type Endpoint12_6Input = {
|
||||
readonly sessionID: Endpoint12_6Request["params"]["sessionID"]
|
||||
readonly requestID: Endpoint12_6Request["params"]["requestID"]
|
||||
readonly reply: Endpoint12_6Request["payload"]["reply"]
|
||||
readonly message?: Endpoint12_6Request["payload"]["message"]
|
||||
}
|
||||
const Endpoint10_6 = (raw: RawClient["server.permission"]) => (input: Endpoint10_6Input) =>
|
||||
const Endpoint12_6 = (raw: RawClient["server.permission"]) => (input: Endpoint12_6Input) =>
|
||||
raw["session.permission.reply"]({
|
||||
params: { sessionID: input["sessionID"], requestID: input["requestID"] },
|
||||
payload: { reply: input["reply"], message: input["message"] },
|
||||
}).pipe(Effect.mapError(mapClientError))
|
||||
|
||||
const adaptGroup10 = (raw: RawClient["server.permission"]) => ({
|
||||
listRequests: Endpoint10_0(raw),
|
||||
listSaved: Endpoint10_1(raw),
|
||||
removeSaved: Endpoint10_2(raw),
|
||||
create: Endpoint10_3(raw),
|
||||
list: Endpoint10_4(raw),
|
||||
get: Endpoint10_5(raw),
|
||||
reply: Endpoint10_6(raw),
|
||||
const adaptGroup12 = (raw: RawClient["server.permission"]) => ({
|
||||
listRequests: Endpoint12_0(raw),
|
||||
listSaved: Endpoint12_1(raw),
|
||||
removeSaved: Endpoint12_2(raw),
|
||||
create: Endpoint12_3(raw),
|
||||
list: Endpoint12_4(raw),
|
||||
get: Endpoint12_5(raw),
|
||||
reply: Endpoint12_6(raw),
|
||||
})
|
||||
|
||||
type Endpoint11_0Request = Parameters<RawClient["server.fs"]["fs.list"]>[0]
|
||||
type Endpoint11_0Input = {
|
||||
readonly location?: Endpoint11_0Request["query"]["location"]
|
||||
readonly path?: Endpoint11_0Request["query"]["path"]
|
||||
type Endpoint13_0Request = Parameters<RawClient["server.fs"]["fs.list"]>[0]
|
||||
type Endpoint13_0Input = {
|
||||
readonly location?: Endpoint13_0Request["query"]["location"]
|
||||
readonly path?: Endpoint13_0Request["query"]["path"]
|
||||
}
|
||||
const Endpoint11_0 = (raw: RawClient["server.fs"]) => (input?: Endpoint11_0Input) =>
|
||||
const Endpoint13_0 = (raw: RawClient["server.fs"]) => (input?: Endpoint13_0Input) =>
|
||||
raw["fs.list"]({ query: { location: input?.["location"], path: input?.["path"] } }).pipe(
|
||||
Effect.mapError(mapClientError),
|
||||
)
|
||||
|
||||
type Endpoint11_1Request = Parameters<RawClient["server.fs"]["fs.find"]>[0]
|
||||
type Endpoint11_1Input = {
|
||||
readonly location?: Endpoint11_1Request["query"]["location"]
|
||||
readonly query: Endpoint11_1Request["query"]["query"]
|
||||
readonly type?: Endpoint11_1Request["query"]["type"]
|
||||
readonly limit?: Endpoint11_1Request["query"]["limit"]
|
||||
type Endpoint13_1Request = Parameters<RawClient["server.fs"]["fs.find"]>[0]
|
||||
type Endpoint13_1Input = {
|
||||
readonly location?: Endpoint13_1Request["query"]["location"]
|
||||
readonly query: Endpoint13_1Request["query"]["query"]
|
||||
readonly type?: Endpoint13_1Request["query"]["type"]
|
||||
readonly limit?: Endpoint13_1Request["query"]["limit"]
|
||||
}
|
||||
const Endpoint11_1 = (raw: RawClient["server.fs"]) => (input: Endpoint11_1Input) =>
|
||||
const Endpoint13_1 = (raw: RawClient["server.fs"]) => (input: Endpoint13_1Input) =>
|
||||
raw["fs.find"]({
|
||||
query: { location: input["location"], query: input["query"], type: input["type"], limit: input["limit"] },
|
||||
}).pipe(Effect.mapError(mapClientError))
|
||||
|
||||
const adaptGroup11 = (raw: RawClient["server.fs"]) => ({ list: Endpoint11_0(raw), find: Endpoint11_1(raw) })
|
||||
const adaptGroup13 = (raw: RawClient["server.fs"]) => ({ list: Endpoint13_0(raw), find: Endpoint13_1(raw) })
|
||||
|
||||
type Endpoint12_0Request = Parameters<RawClient["server.command"]["command.list"]>[0]
|
||||
type Endpoint12_0Input = { readonly location?: Endpoint12_0Request["query"]["location"] }
|
||||
const Endpoint12_0 = (raw: RawClient["server.command"]) => (input?: Endpoint12_0Input) =>
|
||||
type Endpoint14_0Request = Parameters<RawClient["server.command"]["command.list"]>[0]
|
||||
type Endpoint14_0Input = { readonly location?: Endpoint14_0Request["query"]["location"] }
|
||||
const Endpoint14_0 = (raw: RawClient["server.command"]) => (input?: Endpoint14_0Input) =>
|
||||
raw["command.list"]({ query: { location: input?.["location"] } }).pipe(Effect.mapError(mapClientError))
|
||||
|
||||
const adaptGroup12 = (raw: RawClient["server.command"]) => ({ list: Endpoint12_0(raw) })
|
||||
const adaptGroup14 = (raw: RawClient["server.command"]) => ({ list: Endpoint14_0(raw) })
|
||||
|
||||
type Endpoint13_0Request = Parameters<RawClient["server.skill"]["skill.list"]>[0]
|
||||
type Endpoint13_0Input = { readonly location?: Endpoint13_0Request["query"]["location"] }
|
||||
const Endpoint13_0 = (raw: RawClient["server.skill"]) => (input?: Endpoint13_0Input) =>
|
||||
type Endpoint15_0Request = Parameters<RawClient["server.skill"]["skill.list"]>[0]
|
||||
type Endpoint15_0Input = { readonly location?: Endpoint15_0Request["query"]["location"] }
|
||||
const Endpoint15_0 = (raw: RawClient["server.skill"]) => (input?: Endpoint15_0Input) =>
|
||||
raw["skill.list"]({ query: { location: input?.["location"] } }).pipe(Effect.mapError(mapClientError))
|
||||
|
||||
const adaptGroup13 = (raw: RawClient["server.skill"]) => ({ list: Endpoint13_0(raw) })
|
||||
const adaptGroup15 = (raw: RawClient["server.skill"]) => ({ list: Endpoint15_0(raw) })
|
||||
|
||||
const Endpoint14_0 = (raw: RawClient["server.event"]) => () =>
|
||||
const Endpoint16_0 = (raw: RawClient["server.event"]) => () =>
|
||||
Stream.unwrap(
|
||||
raw["event.subscribe"]({}).pipe(
|
||||
Effect.mapError(mapClientError),
|
||||
|
|
@ -544,23 +598,23 @@ const Endpoint14_0 = (raw: RawClient["server.event"]) => () =>
|
|||
),
|
||||
)
|
||||
|
||||
const adaptGroup14 = (raw: RawClient["server.event"]) => ({ subscribe: Endpoint14_0(raw) })
|
||||
const adaptGroup16 = (raw: RawClient["server.event"]) => ({ subscribe: Endpoint16_0(raw) })
|
||||
|
||||
type Endpoint15_0Request = Parameters<RawClient["server.pty"]["pty.list"]>[0]
|
||||
type Endpoint15_0Input = { readonly location?: Endpoint15_0Request["query"]["location"] }
|
||||
const Endpoint15_0 = (raw: RawClient["server.pty"]) => (input?: Endpoint15_0Input) =>
|
||||
type Endpoint17_0Request = Parameters<RawClient["server.pty"]["pty.list"]>[0]
|
||||
type Endpoint17_0Input = { readonly location?: Endpoint17_0Request["query"]["location"] }
|
||||
const Endpoint17_0 = (raw: RawClient["server.pty"]) => (input?: Endpoint17_0Input) =>
|
||||
raw["pty.list"]({ query: { location: input?.["location"] } }).pipe(Effect.mapError(mapClientError))
|
||||
|
||||
type Endpoint15_1Request = Parameters<RawClient["server.pty"]["pty.create"]>[0]
|
||||
type Endpoint15_1Input = {
|
||||
readonly location?: Endpoint15_1Request["query"]["location"]
|
||||
readonly command?: Endpoint15_1Request["payload"]["command"]
|
||||
readonly args?: Endpoint15_1Request["payload"]["args"]
|
||||
readonly cwd?: Endpoint15_1Request["payload"]["cwd"]
|
||||
readonly title?: Endpoint15_1Request["payload"]["title"]
|
||||
readonly env?: Endpoint15_1Request["payload"]["env"]
|
||||
type Endpoint17_1Request = Parameters<RawClient["server.pty"]["pty.create"]>[0]
|
||||
type Endpoint17_1Input = {
|
||||
readonly location?: Endpoint17_1Request["query"]["location"]
|
||||
readonly command?: Endpoint17_1Request["payload"]["command"]
|
||||
readonly args?: Endpoint17_1Request["payload"]["args"]
|
||||
readonly cwd?: Endpoint17_1Request["payload"]["cwd"]
|
||||
readonly title?: Endpoint17_1Request["payload"]["title"]
|
||||
readonly env?: Endpoint17_1Request["payload"]["env"]
|
||||
}
|
||||
const Endpoint15_1 = (raw: RawClient["server.pty"]) => (input?: Endpoint15_1Input) =>
|
||||
const Endpoint17_1 = (raw: RawClient["server.pty"]) => (input?: Endpoint17_1Input) =>
|
||||
raw["pty.create"]({
|
||||
query: { location: input?.["location"] },
|
||||
payload: {
|
||||
|
|
@ -572,224 +626,226 @@ const Endpoint15_1 = (raw: RawClient["server.pty"]) => (input?: Endpoint15_1Inpu
|
|||
},
|
||||
}).pipe(Effect.mapError(mapClientError))
|
||||
|
||||
type Endpoint15_2Request = Parameters<RawClient["server.pty"]["pty.get"]>[0]
|
||||
type Endpoint15_2Input = {
|
||||
readonly ptyID: Endpoint15_2Request["params"]["ptyID"]
|
||||
readonly location?: Endpoint15_2Request["query"]["location"]
|
||||
type Endpoint17_2Request = Parameters<RawClient["server.pty"]["pty.get"]>[0]
|
||||
type Endpoint17_2Input = {
|
||||
readonly ptyID: Endpoint17_2Request["params"]["ptyID"]
|
||||
readonly location?: Endpoint17_2Request["query"]["location"]
|
||||
}
|
||||
const Endpoint15_2 = (raw: RawClient["server.pty"]) => (input: Endpoint15_2Input) =>
|
||||
const Endpoint17_2 = (raw: RawClient["server.pty"]) => (input: Endpoint17_2Input) =>
|
||||
raw["pty.get"]({ params: { ptyID: input["ptyID"] }, query: { location: input["location"] } }).pipe(
|
||||
Effect.mapError(mapClientError),
|
||||
)
|
||||
|
||||
type Endpoint15_3Request = Parameters<RawClient["server.pty"]["pty.update"]>[0]
|
||||
type Endpoint15_3Input = {
|
||||
readonly ptyID: Endpoint15_3Request["params"]["ptyID"]
|
||||
readonly location?: Endpoint15_3Request["query"]["location"]
|
||||
readonly title?: Endpoint15_3Request["payload"]["title"]
|
||||
readonly size?: Endpoint15_3Request["payload"]["size"]
|
||||
type Endpoint17_3Request = Parameters<RawClient["server.pty"]["pty.update"]>[0]
|
||||
type Endpoint17_3Input = {
|
||||
readonly ptyID: Endpoint17_3Request["params"]["ptyID"]
|
||||
readonly location?: Endpoint17_3Request["query"]["location"]
|
||||
readonly title?: Endpoint17_3Request["payload"]["title"]
|
||||
readonly size?: Endpoint17_3Request["payload"]["size"]
|
||||
}
|
||||
const Endpoint15_3 = (raw: RawClient["server.pty"]) => (input: Endpoint15_3Input) =>
|
||||
const Endpoint17_3 = (raw: RawClient["server.pty"]) => (input: Endpoint17_3Input) =>
|
||||
raw["pty.update"]({
|
||||
params: { ptyID: input["ptyID"] },
|
||||
query: { location: input["location"] },
|
||||
payload: { title: input["title"], size: input["size"] },
|
||||
}).pipe(Effect.mapError(mapClientError))
|
||||
|
||||
type Endpoint15_4Request = Parameters<RawClient["server.pty"]["pty.remove"]>[0]
|
||||
type Endpoint15_4Input = {
|
||||
readonly ptyID: Endpoint15_4Request["params"]["ptyID"]
|
||||
readonly location?: Endpoint15_4Request["query"]["location"]
|
||||
type Endpoint17_4Request = Parameters<RawClient["server.pty"]["pty.remove"]>[0]
|
||||
type Endpoint17_4Input = {
|
||||
readonly ptyID: Endpoint17_4Request["params"]["ptyID"]
|
||||
readonly location?: Endpoint17_4Request["query"]["location"]
|
||||
}
|
||||
const Endpoint15_4 = (raw: RawClient["server.pty"]) => (input: Endpoint15_4Input) =>
|
||||
const Endpoint17_4 = (raw: RawClient["server.pty"]) => (input: Endpoint17_4Input) =>
|
||||
raw["pty.remove"]({ params: { ptyID: input["ptyID"] }, query: { location: input["location"] } }).pipe(
|
||||
Effect.mapError(mapClientError),
|
||||
)
|
||||
|
||||
const adaptGroup15 = (raw: RawClient["server.pty"]) => ({
|
||||
list: Endpoint15_0(raw),
|
||||
create: Endpoint15_1(raw),
|
||||
get: Endpoint15_2(raw),
|
||||
update: Endpoint15_3(raw),
|
||||
remove: Endpoint15_4(raw),
|
||||
const adaptGroup17 = (raw: RawClient["server.pty"]) => ({
|
||||
list: Endpoint17_0(raw),
|
||||
create: Endpoint17_1(raw),
|
||||
get: Endpoint17_2(raw),
|
||||
update: Endpoint17_3(raw),
|
||||
remove: Endpoint17_4(raw),
|
||||
})
|
||||
|
||||
type Endpoint16_0Request = Parameters<RawClient["server.shell"]["shell.list"]>[0]
|
||||
type Endpoint16_0Input = { readonly location?: Endpoint16_0Request["query"]["location"] }
|
||||
const Endpoint16_0 = (raw: RawClient["server.shell"]) => (input?: Endpoint16_0Input) =>
|
||||
type Endpoint18_0Request = Parameters<RawClient["server.shell"]["shell.list"]>[0]
|
||||
type Endpoint18_0Input = { readonly location?: Endpoint18_0Request["query"]["location"] }
|
||||
const Endpoint18_0 = (raw: RawClient["server.shell"]) => (input?: Endpoint18_0Input) =>
|
||||
raw["shell.list"]({ query: { location: input?.["location"] } }).pipe(Effect.mapError(mapClientError))
|
||||
|
||||
type Endpoint16_1Request = Parameters<RawClient["server.shell"]["shell.create"]>[0]
|
||||
type Endpoint16_1Input = {
|
||||
readonly location?: Endpoint16_1Request["query"]["location"]
|
||||
readonly command: Endpoint16_1Request["payload"]["command"]
|
||||
readonly cwd?: Endpoint16_1Request["payload"]["cwd"]
|
||||
readonly timeout?: Endpoint16_1Request["payload"]["timeout"]
|
||||
readonly metadata?: Endpoint16_1Request["payload"]["metadata"]
|
||||
type Endpoint18_1Request = Parameters<RawClient["server.shell"]["shell.create"]>[0]
|
||||
type Endpoint18_1Input = {
|
||||
readonly location?: Endpoint18_1Request["query"]["location"]
|
||||
readonly command: Endpoint18_1Request["payload"]["command"]
|
||||
readonly cwd?: Endpoint18_1Request["payload"]["cwd"]
|
||||
readonly timeout?: Endpoint18_1Request["payload"]["timeout"]
|
||||
readonly metadata?: Endpoint18_1Request["payload"]["metadata"]
|
||||
}
|
||||
const Endpoint16_1 = (raw: RawClient["server.shell"]) => (input: Endpoint16_1Input) =>
|
||||
const Endpoint18_1 = (raw: RawClient["server.shell"]) => (input: Endpoint18_1Input) =>
|
||||
raw["shell.create"]({
|
||||
query: { location: input["location"] },
|
||||
payload: { command: input["command"], cwd: input["cwd"], timeout: input["timeout"], metadata: input["metadata"] },
|
||||
}).pipe(Effect.mapError(mapClientError))
|
||||
|
||||
type Endpoint16_2Request = Parameters<RawClient["server.shell"]["shell.get"]>[0]
|
||||
type Endpoint16_2Input = {
|
||||
readonly id: Endpoint16_2Request["params"]["id"]
|
||||
readonly location?: Endpoint16_2Request["query"]["location"]
|
||||
type Endpoint18_2Request = Parameters<RawClient["server.shell"]["shell.get"]>[0]
|
||||
type Endpoint18_2Input = {
|
||||
readonly id: Endpoint18_2Request["params"]["id"]
|
||||
readonly location?: Endpoint18_2Request["query"]["location"]
|
||||
}
|
||||
const Endpoint16_2 = (raw: RawClient["server.shell"]) => (input: Endpoint16_2Input) =>
|
||||
const Endpoint18_2 = (raw: RawClient["server.shell"]) => (input: Endpoint18_2Input) =>
|
||||
raw["shell.get"]({ params: { id: input["id"] }, query: { location: input["location"] } }).pipe(
|
||||
Effect.mapError(mapClientError),
|
||||
)
|
||||
|
||||
type Endpoint16_3Request = Parameters<RawClient["server.shell"]["shell.output"]>[0]
|
||||
type Endpoint16_3Input = {
|
||||
readonly id: Endpoint16_3Request["params"]["id"]
|
||||
readonly location?: Endpoint16_3Request["query"]["location"]
|
||||
readonly cursor?: Endpoint16_3Request["query"]["cursor"]
|
||||
readonly limit?: Endpoint16_3Request["query"]["limit"]
|
||||
type Endpoint18_3Request = Parameters<RawClient["server.shell"]["shell.output"]>[0]
|
||||
type Endpoint18_3Input = {
|
||||
readonly id: Endpoint18_3Request["params"]["id"]
|
||||
readonly location?: Endpoint18_3Request["query"]["location"]
|
||||
readonly cursor?: Endpoint18_3Request["query"]["cursor"]
|
||||
readonly limit?: Endpoint18_3Request["query"]["limit"]
|
||||
}
|
||||
const Endpoint16_3 = (raw: RawClient["server.shell"]) => (input: Endpoint16_3Input) =>
|
||||
const Endpoint18_3 = (raw: RawClient["server.shell"]) => (input: Endpoint18_3Input) =>
|
||||
raw["shell.output"]({
|
||||
params: { id: input["id"] },
|
||||
query: { location: input["location"], cursor: input["cursor"], limit: input["limit"] },
|
||||
}).pipe(Effect.mapError(mapClientError))
|
||||
|
||||
type Endpoint16_4Request = Parameters<RawClient["server.shell"]["shell.remove"]>[0]
|
||||
type Endpoint16_4Input = {
|
||||
readonly id: Endpoint16_4Request["params"]["id"]
|
||||
readonly location?: Endpoint16_4Request["query"]["location"]
|
||||
type Endpoint18_4Request = Parameters<RawClient["server.shell"]["shell.remove"]>[0]
|
||||
type Endpoint18_4Input = {
|
||||
readonly id: Endpoint18_4Request["params"]["id"]
|
||||
readonly location?: Endpoint18_4Request["query"]["location"]
|
||||
}
|
||||
const Endpoint16_4 = (raw: RawClient["server.shell"]) => (input: Endpoint16_4Input) =>
|
||||
const Endpoint18_4 = (raw: RawClient["server.shell"]) => (input: Endpoint18_4Input) =>
|
||||
raw["shell.remove"]({ params: { id: input["id"] }, query: { location: input["location"] } }).pipe(
|
||||
Effect.mapError(mapClientError),
|
||||
)
|
||||
|
||||
const adaptGroup16 = (raw: RawClient["server.shell"]) => ({
|
||||
list: Endpoint16_0(raw),
|
||||
create: Endpoint16_1(raw),
|
||||
get: Endpoint16_2(raw),
|
||||
output: Endpoint16_3(raw),
|
||||
remove: Endpoint16_4(raw),
|
||||
const adaptGroup18 = (raw: RawClient["server.shell"]) => ({
|
||||
list: Endpoint18_0(raw),
|
||||
create: Endpoint18_1(raw),
|
||||
get: Endpoint18_2(raw),
|
||||
output: Endpoint18_3(raw),
|
||||
remove: Endpoint18_4(raw),
|
||||
})
|
||||
|
||||
type Endpoint17_0Request = Parameters<RawClient["server.question"]["question.request.list"]>[0]
|
||||
type Endpoint17_0Input = { readonly location?: Endpoint17_0Request["query"]["location"] }
|
||||
const Endpoint17_0 = (raw: RawClient["server.question"]) => (input?: Endpoint17_0Input) =>
|
||||
type Endpoint19_0Request = Parameters<RawClient["server.question"]["question.request.list"]>[0]
|
||||
type Endpoint19_0Input = { readonly location?: Endpoint19_0Request["query"]["location"] }
|
||||
const Endpoint19_0 = (raw: RawClient["server.question"]) => (input?: Endpoint19_0Input) =>
|
||||
raw["question.request.list"]({ query: { location: input?.["location"] } }).pipe(Effect.mapError(mapClientError))
|
||||
|
||||
type Endpoint17_1Request = Parameters<RawClient["server.question"]["session.question.list"]>[0]
|
||||
type Endpoint17_1Input = { readonly sessionID: Endpoint17_1Request["params"]["sessionID"] }
|
||||
const Endpoint17_1 = (raw: RawClient["server.question"]) => (input: Endpoint17_1Input) =>
|
||||
type Endpoint19_1Request = Parameters<RawClient["server.question"]["session.question.list"]>[0]
|
||||
type Endpoint19_1Input = { readonly sessionID: Endpoint19_1Request["params"]["sessionID"] }
|
||||
const Endpoint19_1 = (raw: RawClient["server.question"]) => (input: Endpoint19_1Input) =>
|
||||
raw["session.question.list"]({ params: { sessionID: input["sessionID"] } }).pipe(
|
||||
Effect.mapError(mapClientError),
|
||||
Effect.map((value) => value.data),
|
||||
)
|
||||
|
||||
type Endpoint17_2Request = Parameters<RawClient["server.question"]["session.question.reply"]>[0]
|
||||
type Endpoint17_2Input = {
|
||||
readonly sessionID: Endpoint17_2Request["params"]["sessionID"]
|
||||
readonly requestID: Endpoint17_2Request["params"]["requestID"]
|
||||
readonly answers: Endpoint17_2Request["payload"]["answers"]
|
||||
type Endpoint19_2Request = Parameters<RawClient["server.question"]["session.question.reply"]>[0]
|
||||
type Endpoint19_2Input = {
|
||||
readonly sessionID: Endpoint19_2Request["params"]["sessionID"]
|
||||
readonly requestID: Endpoint19_2Request["params"]["requestID"]
|
||||
readonly answers: Endpoint19_2Request["payload"]["answers"]
|
||||
}
|
||||
const Endpoint17_2 = (raw: RawClient["server.question"]) => (input: Endpoint17_2Input) =>
|
||||
const Endpoint19_2 = (raw: RawClient["server.question"]) => (input: Endpoint19_2Input) =>
|
||||
raw["session.question.reply"]({
|
||||
params: { sessionID: input["sessionID"], requestID: input["requestID"] },
|
||||
payload: { answers: input["answers"] },
|
||||
}).pipe(Effect.mapError(mapClientError))
|
||||
|
||||
type Endpoint17_3Request = Parameters<RawClient["server.question"]["session.question.reject"]>[0]
|
||||
type Endpoint17_3Input = {
|
||||
readonly sessionID: Endpoint17_3Request["params"]["sessionID"]
|
||||
readonly requestID: Endpoint17_3Request["params"]["requestID"]
|
||||
type Endpoint19_3Request = Parameters<RawClient["server.question"]["session.question.reject"]>[0]
|
||||
type Endpoint19_3Input = {
|
||||
readonly sessionID: Endpoint19_3Request["params"]["sessionID"]
|
||||
readonly requestID: Endpoint19_3Request["params"]["requestID"]
|
||||
}
|
||||
const Endpoint17_3 = (raw: RawClient["server.question"]) => (input: Endpoint17_3Input) =>
|
||||
const Endpoint19_3 = (raw: RawClient["server.question"]) => (input: Endpoint19_3Input) =>
|
||||
raw["session.question.reject"]({ params: { sessionID: input["sessionID"], requestID: input["requestID"] } }).pipe(
|
||||
Effect.mapError(mapClientError),
|
||||
)
|
||||
|
||||
const adaptGroup17 = (raw: RawClient["server.question"]) => ({
|
||||
listRequests: Endpoint17_0(raw),
|
||||
list: Endpoint17_1(raw),
|
||||
reply: Endpoint17_2(raw),
|
||||
reject: Endpoint17_3(raw),
|
||||
const adaptGroup19 = (raw: RawClient["server.question"]) => ({
|
||||
listRequests: Endpoint19_0(raw),
|
||||
list: Endpoint19_1(raw),
|
||||
reply: Endpoint19_2(raw),
|
||||
reject: Endpoint19_3(raw),
|
||||
})
|
||||
|
||||
type Endpoint18_0Request = Parameters<RawClient["server.reference"]["reference.list"]>[0]
|
||||
type Endpoint18_0Input = { readonly location?: Endpoint18_0Request["query"]["location"] }
|
||||
const Endpoint18_0 = (raw: RawClient["server.reference"]) => (input?: Endpoint18_0Input) =>
|
||||
type Endpoint20_0Request = Parameters<RawClient["server.reference"]["reference.list"]>[0]
|
||||
type Endpoint20_0Input = { readonly location?: Endpoint20_0Request["query"]["location"] }
|
||||
const Endpoint20_0 = (raw: RawClient["server.reference"]) => (input?: Endpoint20_0Input) =>
|
||||
raw["reference.list"]({ query: { location: input?.["location"] } }).pipe(Effect.mapError(mapClientError))
|
||||
|
||||
const adaptGroup18 = (raw: RawClient["server.reference"]) => ({ list: Endpoint18_0(raw) })
|
||||
const adaptGroup20 = (raw: RawClient["server.reference"]) => ({ list: Endpoint20_0(raw) })
|
||||
|
||||
type Endpoint19_0Request = Parameters<RawClient["server.projectCopy"]["projectCopy.create"]>[0]
|
||||
type Endpoint19_0Input = {
|
||||
readonly projectID: Endpoint19_0Request["params"]["projectID"]
|
||||
readonly location?: Endpoint19_0Request["query"]["location"]
|
||||
readonly strategy: Endpoint19_0Request["payload"]["strategy"]
|
||||
readonly directory: Endpoint19_0Request["payload"]["directory"]
|
||||
readonly name?: Endpoint19_0Request["payload"]["name"]
|
||||
type Endpoint21_0Request = Parameters<RawClient["server.projectCopy"]["projectCopy.create"]>[0]
|
||||
type Endpoint21_0Input = {
|
||||
readonly projectID: Endpoint21_0Request["params"]["projectID"]
|
||||
readonly location?: Endpoint21_0Request["query"]["location"]
|
||||
readonly strategy: Endpoint21_0Request["payload"]["strategy"]
|
||||
readonly directory: Endpoint21_0Request["payload"]["directory"]
|
||||
readonly name?: Endpoint21_0Request["payload"]["name"]
|
||||
}
|
||||
const Endpoint19_0 = (raw: RawClient["server.projectCopy"]) => (input: Endpoint19_0Input) =>
|
||||
const Endpoint21_0 = (raw: RawClient["server.projectCopy"]) => (input: Endpoint21_0Input) =>
|
||||
raw["projectCopy.create"]({
|
||||
params: { projectID: input["projectID"] },
|
||||
query: { location: input["location"] },
|
||||
payload: { strategy: input["strategy"], directory: input["directory"], name: input["name"] },
|
||||
}).pipe(Effect.mapError(mapClientError))
|
||||
|
||||
type Endpoint19_1Request = Parameters<RawClient["server.projectCopy"]["projectCopy.remove"]>[0]
|
||||
type Endpoint19_1Input = {
|
||||
readonly projectID: Endpoint19_1Request["params"]["projectID"]
|
||||
readonly location?: Endpoint19_1Request["query"]["location"]
|
||||
readonly directory: Endpoint19_1Request["payload"]["directory"]
|
||||
readonly force: Endpoint19_1Request["payload"]["force"]
|
||||
type Endpoint21_1Request = Parameters<RawClient["server.projectCopy"]["projectCopy.remove"]>[0]
|
||||
type Endpoint21_1Input = {
|
||||
readonly projectID: Endpoint21_1Request["params"]["projectID"]
|
||||
readonly location?: Endpoint21_1Request["query"]["location"]
|
||||
readonly directory: Endpoint21_1Request["payload"]["directory"]
|
||||
readonly force: Endpoint21_1Request["payload"]["force"]
|
||||
}
|
||||
const Endpoint19_1 = (raw: RawClient["server.projectCopy"]) => (input: Endpoint19_1Input) =>
|
||||
const Endpoint21_1 = (raw: RawClient["server.projectCopy"]) => (input: Endpoint21_1Input) =>
|
||||
raw["projectCopy.remove"]({
|
||||
params: { projectID: input["projectID"] },
|
||||
query: { location: input["location"] },
|
||||
payload: { directory: input["directory"], force: input["force"] },
|
||||
}).pipe(Effect.mapError(mapClientError))
|
||||
|
||||
type Endpoint19_2Request = Parameters<RawClient["server.projectCopy"]["projectCopy.refresh"]>[0]
|
||||
type Endpoint19_2Input = {
|
||||
readonly projectID: Endpoint19_2Request["params"]["projectID"]
|
||||
readonly location?: Endpoint19_2Request["query"]["location"]
|
||||
type Endpoint21_2Request = Parameters<RawClient["server.projectCopy"]["projectCopy.refresh"]>[0]
|
||||
type Endpoint21_2Input = {
|
||||
readonly projectID: Endpoint21_2Request["params"]["projectID"]
|
||||
readonly location?: Endpoint21_2Request["query"]["location"]
|
||||
}
|
||||
const Endpoint19_2 = (raw: RawClient["server.projectCopy"]) => (input: Endpoint19_2Input) =>
|
||||
const Endpoint21_2 = (raw: RawClient["server.projectCopy"]) => (input: Endpoint21_2Input) =>
|
||||
raw["projectCopy.refresh"]({
|
||||
params: { projectID: input["projectID"] },
|
||||
query: { location: input["location"] },
|
||||
}).pipe(Effect.mapError(mapClientError))
|
||||
|
||||
const adaptGroup19 = (raw: RawClient["server.projectCopy"]) => ({
|
||||
create: Endpoint19_0(raw),
|
||||
remove: Endpoint19_1(raw),
|
||||
refresh: Endpoint19_2(raw),
|
||||
const adaptGroup21 = (raw: RawClient["server.projectCopy"]) => ({
|
||||
create: Endpoint21_0(raw),
|
||||
remove: Endpoint21_1(raw),
|
||||
refresh: Endpoint21_2(raw),
|
||||
})
|
||||
|
||||
const adaptClient = (raw: RawClient) => ({
|
||||
health: adaptGroup0(raw["server.health"]),
|
||||
location: adaptGroup1(raw["server.location"]),
|
||||
agents: adaptGroup2(raw["server.agent"]),
|
||||
sessions: adaptGroup3(raw["server.session"]),
|
||||
messages: adaptGroup4(raw["server.message"]),
|
||||
models: adaptGroup5(raw["server.model"]),
|
||||
agent: adaptGroup2(raw["server.agent"]),
|
||||
session: adaptGroup3(raw["server.session"]),
|
||||
message: adaptGroup4(raw["server.message"]),
|
||||
model: adaptGroup5(raw["server.model"]),
|
||||
generate: adaptGroup6(raw["server.generate"]),
|
||||
providers: adaptGroup7(raw["server.provider"]),
|
||||
integrations: adaptGroup8(raw["server.integration"]),
|
||||
credentials: adaptGroup9(raw["server.credential"]),
|
||||
permissions: adaptGroup10(raw["server.permission"]),
|
||||
files: adaptGroup11(raw["server.fs"]),
|
||||
commands: adaptGroup12(raw["server.command"]),
|
||||
skills: adaptGroup13(raw["server.skill"]),
|
||||
events: adaptGroup14(raw["server.event"]),
|
||||
ptys: adaptGroup15(raw["server.pty"]),
|
||||
"server.shell": adaptGroup16(raw["server.shell"]),
|
||||
questions: adaptGroup17(raw["server.question"]),
|
||||
references: adaptGroup18(raw["server.reference"]),
|
||||
projectCopies: adaptGroup19(raw["server.projectCopy"]),
|
||||
provider: adaptGroup7(raw["server.provider"]),
|
||||
integration: adaptGroup8(raw["server.integration"]),
|
||||
"server.mcp": adaptGroup9(raw["server.mcp"]),
|
||||
credential: adaptGroup10(raw["server.credential"]),
|
||||
project: adaptGroup11(raw["server.project"]),
|
||||
permission: adaptGroup12(raw["server.permission"]),
|
||||
file: adaptGroup13(raw["server.fs"]),
|
||||
command: adaptGroup14(raw["server.command"]),
|
||||
skill: adaptGroup15(raw["server.skill"]),
|
||||
event: adaptGroup16(raw["server.event"]),
|
||||
pty: adaptGroup17(raw["server.pty"]),
|
||||
shell: adaptGroup18(raw["server.shell"]),
|
||||
question: adaptGroup19(raw["server.question"]),
|
||||
reference: adaptGroup20(raw["server.reference"]),
|
||||
projectCopy: adaptGroup21(raw["server.projectCopy"]),
|
||||
})
|
||||
|
||||
export const make = (options?: { readonly baseUrl?: URL | string }) =>
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -1,2 +1,3 @@
|
|||
export * from "./generated/index"
|
||||
export type { EventsSubscribeOutput as OpenCodeEvent } from "./generated/types"
|
||||
export type { EventSubscribeOutput as OpenCodeEvent } from "./generated/types"
|
||||
export type OpenCodeClient = ReturnType<typeof import("./generated/client").make>
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ import { Schema } from "effect"
|
|||
import { AgentV2 } from "@opencode-ai/core/agent"
|
||||
import { Location as CoreLocation } from "@opencode-ai/core/location"
|
||||
import { ModelV2 } from "@opencode-ai/core/model"
|
||||
import { ProjectV2 } from "@opencode-ai/core/project"
|
||||
import { SessionV2 } from "@opencode-ai/core/session"
|
||||
import { SessionInput as CoreSessionInput } from "@opencode-ai/core/session/input"
|
||||
import { SessionMessage as CoreSessionMessage } from "@opencode-ai/core/session/message"
|
||||
|
|
@ -26,10 +27,14 @@ test("Core and Server reuse the authoritative Schema and Protocol values", () =>
|
|||
expect(CoreLocation.Ref).toBe(Location.Ref)
|
||||
expect(ModelV2.Ref).toBe(Model.Ref)
|
||||
expect(SessionV2.Info).toBe(Session.Info)
|
||||
expect(ProjectV2.Current).toBe(Project.Current)
|
||||
expect(ProjectV2.Directory).toBe(Project.Directory)
|
||||
expect(ProjectV2.Directories).toBe(Project.Directories)
|
||||
expect(CoreSessionInput.Admitted).toBe(SessionInput.Admitted)
|
||||
expect(CoreSessionMessage.Message).toBe(SessionMessage.Message)
|
||||
expect(CorePrompt).toBe(Prompt)
|
||||
expect(Api.groups["server.session"].identifier).toBe("server.session")
|
||||
expect(Api.groups["server.project"].identifier).toBe("server.project")
|
||||
expect(Object.keys(ClientApi.groups)).toEqual(Object.keys(Api.groups))
|
||||
expect(Session.ID.create()).toStartWith("ses_")
|
||||
expect(Project.ID.global).toBe("global")
|
||||
|
|
|
|||
|
|
@ -3,19 +3,19 @@ import { DateTime, Effect, Stream } from "effect"
|
|||
import { HttpClient, HttpClientResponse } from "effect/unstable/http"
|
||||
import { AbsolutePath, Agent, Location, Model, OpenCode, Prompt, Session, SessionMessage } from "../src/effect"
|
||||
|
||||
test("sessions.get returns the decoded Effect projection", async () => {
|
||||
test("session.get returns the decoded Effect projection", async () => {
|
||||
const httpClient = HttpClient.make((request) =>
|
||||
Effect.succeed(HttpClientResponse.fromWeb(request, Response.json(session))),
|
||||
)
|
||||
const result = await Effect.gen(function* () {
|
||||
const client = yield* OpenCode.make({ baseUrl: "http://localhost:3000" })
|
||||
return yield* client.sessions.get({ sessionID: Session.ID.make("ses_test") })
|
||||
return yield* client.session.get({ sessionID: Session.ID.make("ses_test") })
|
||||
}).pipe(Effect.provideService(HttpClient.HttpClient, httpClient), Effect.runPromise)
|
||||
|
||||
expect(DateTime.toEpochMillis(result.time.created)).toBe(1_717_171_717_000)
|
||||
})
|
||||
|
||||
test("events.subscribe exposes and decodes the native Effect event stream", async () => {
|
||||
test("event.subscribe exposes and decodes the native Effect event stream", async () => {
|
||||
const httpClient = HttpClient.make((request) =>
|
||||
Effect.succeed(
|
||||
HttpClientResponse.fromWeb(
|
||||
|
|
@ -30,7 +30,7 @@ test("events.subscribe exposes and decodes the native Effect event stream", asyn
|
|||
)
|
||||
const events = await Effect.gen(function* () {
|
||||
const client = yield* OpenCode.make({ baseUrl: "http://localhost:3000" })
|
||||
return yield* client.events.subscribe().pipe(Stream.runCollect)
|
||||
return yield* client.event.subscribe().pipe(Stream.runCollect)
|
||||
}).pipe(Effect.provideService(HttpClient.HttpClient, httpClient), Effect.runPromise)
|
||||
|
||||
expect(Array.from(events).map((event) => event.type)).toEqual(["server.connected", "session.next.model.switched"])
|
||||
|
|
@ -40,7 +40,7 @@ test("events.subscribe exposes and decodes the native Effect event stream", asyn
|
|||
expect(durable.durable).toEqual({ aggregateID: "ses_test", seq: 1, version: 1 })
|
||||
})
|
||||
|
||||
test("events.subscribe terminates on Effect protocol decode failures", async () => {
|
||||
test("event.subscribe terminates on Effect protocol decode failures", async () => {
|
||||
const httpClient = HttpClient.make((request) =>
|
||||
Effect.succeed(
|
||||
HttpClientResponse.fromWeb(
|
||||
|
|
@ -53,7 +53,7 @@ test("events.subscribe terminates on Effect protocol decode failures", async ()
|
|||
)
|
||||
const error = await Effect.gen(function* () {
|
||||
const client = yield* OpenCode.make({ baseUrl: "http://localhost:3000" })
|
||||
return yield* client.events.subscribe().pipe(Stream.runCollect, Effect.flip)
|
||||
return yield* client.event.subscribe().pipe(Stream.runCollect, Effect.flip)
|
||||
}).pipe(Effect.provideService(HttpClient.HttpClient, httpClient), Effect.runPromise)
|
||||
|
||||
expect(error._tag).toBe("ClientError")
|
||||
|
|
@ -112,41 +112,41 @@ test("session methods retain decoded Effect inputs and outputs", async () => {
|
|||
})
|
||||
const result = await Effect.gen(function* () {
|
||||
const client = yield* OpenCode.make({ baseUrl: "http://localhost:3000" })
|
||||
const page = yield* client.sessions.list({ limit: 10 })
|
||||
const active = yield* client.sessions.active()
|
||||
const created = yield* client.sessions.create({
|
||||
const page = yield* client.session.list({ limit: 10 })
|
||||
const active = yield* client.session.active()
|
||||
const created = yield* client.session.create({
|
||||
location: Location.Ref.make({ directory: AbsolutePath.make("/tmp/project") }),
|
||||
})
|
||||
yield* client.sessions.switchAgent({ sessionID: Session.ID.make("ses_test"), agent: Agent.ID.make("build") })
|
||||
yield* client.sessions.switchModel({
|
||||
yield* client.session.switchAgent({ sessionID: Session.ID.make("ses_test"), agent: Agent.ID.make("build") })
|
||||
yield* client.session.switchModel({
|
||||
sessionID: Session.ID.make("ses_test"),
|
||||
model: Model.Ref.make({ id: "claude", providerID: "anthropic" }),
|
||||
})
|
||||
const admitted = yield* client.sessions.prompt({
|
||||
const admitted = yield* client.session.prompt({
|
||||
sessionID: Session.ID.make("ses_test"),
|
||||
prompt: Prompt.make({ text: "Hello" }),
|
||||
resume: false,
|
||||
})
|
||||
yield* client.sessions.compact({ sessionID: Session.ID.make("ses_test") })
|
||||
yield* client.sessions.wait({ sessionID: Session.ID.make("ses_test") })
|
||||
const context = yield* client.sessions.context({ sessionID: Session.ID.make("ses_test") })
|
||||
const history = yield* client.sessions.history({
|
||||
yield* client.session.compact({ sessionID: Session.ID.make("ses_test") })
|
||||
yield* client.session.wait({ sessionID: Session.ID.make("ses_test") })
|
||||
const context = yield* client.session.context({ sessionID: Session.ID.make("ses_test") })
|
||||
const history = yield* client.session.history({
|
||||
sessionID: Session.ID.make("ses_test"),
|
||||
after: 0,
|
||||
limit: 1,
|
||||
})
|
||||
const historyNext = history.hasMore
|
||||
? yield* client.sessions.history({
|
||||
? yield* client.session.history({
|
||||
sessionID: Session.ID.make("ses_test"),
|
||||
after: history.data.at(-1)?.durable?.seq,
|
||||
limit: 2,
|
||||
})
|
||||
: undefined
|
||||
const events = yield* client.sessions
|
||||
const events = yield* client.session
|
||||
.events({ sessionID: Session.ID.make("ses_test"), after: 0 })
|
||||
.pipe(Stream.runCollect)
|
||||
yield* client.sessions.interrupt({ sessionID: Session.ID.make("ses_test") })
|
||||
const message = yield* client.sessions.message({
|
||||
yield* client.session.interrupt({ sessionID: Session.ID.make("ses_test") })
|
||||
const message = yield* client.session.message({
|
||||
sessionID: Session.ID.make("ses_test"),
|
||||
messageID: SessionMessage.ID.make("msg_model"),
|
||||
})
|
||||
|
|
@ -171,7 +171,7 @@ test("session methods retain decoded Effect inputs and outputs", async () => {
|
|||
expect(result.message).toEqual(expect.objectContaining({ id: "msg_model", type: "model-switched" }))
|
||||
})
|
||||
|
||||
test("sessions.history retains the typed SessionNotFoundError", async () => {
|
||||
test("session.history retains the typed SessionNotFoundError", async () => {
|
||||
const httpClient = HttpClient.make((request) =>
|
||||
Effect.succeed(
|
||||
HttpClientResponse.fromWeb(
|
||||
|
|
@ -185,7 +185,7 @@ test("sessions.history retains the typed SessionNotFoundError", async () => {
|
|||
)
|
||||
const error = await Effect.gen(function* () {
|
||||
const client = yield* OpenCode.make({ baseUrl: "http://localhost:3000" })
|
||||
return yield* client.sessions
|
||||
return yield* client.session
|
||||
.history({
|
||||
sessionID: Session.ID.make("ses_missing"),
|
||||
})
|
||||
|
|
|
|||
|
|
@ -7,26 +7,28 @@ test("exposes every standard HTTP API group", () => {
|
|||
expect(Object.keys(client)).toEqual([
|
||||
"health",
|
||||
"location",
|
||||
"agents",
|
||||
"sessions",
|
||||
"messages",
|
||||
"models",
|
||||
"agent",
|
||||
"session",
|
||||
"message",
|
||||
"model",
|
||||
"generate",
|
||||
"providers",
|
||||
"integrations",
|
||||
"credentials",
|
||||
"permissions",
|
||||
"files",
|
||||
"commands",
|
||||
"skills",
|
||||
"events",
|
||||
"ptys",
|
||||
"questions",
|
||||
"references",
|
||||
"projectCopies",
|
||||
"provider",
|
||||
"integration",
|
||||
"credential",
|
||||
"project",
|
||||
"permission",
|
||||
"file",
|
||||
"command",
|
||||
"skill",
|
||||
"event",
|
||||
"pty",
|
||||
"shell",
|
||||
"question",
|
||||
"reference",
|
||||
"projectCopy",
|
||||
])
|
||||
expect(Object.keys(client.messages)).toEqual(["list"])
|
||||
expect(Object.keys(client.integrations)).toEqual([
|
||||
expect(Object.keys(client.message)).toEqual(["list"])
|
||||
expect(Object.keys(client.integration)).toEqual([
|
||||
"list",
|
||||
"get",
|
||||
"connectKey",
|
||||
|
|
@ -35,11 +37,95 @@ test("exposes every standard HTTP API group", () => {
|
|||
"attemptComplete",
|
||||
"attemptCancel",
|
||||
])
|
||||
expect(Object.keys(client.files)).toEqual(["list", "find"])
|
||||
expect(Object.keys(client.ptys)).toEqual(["list", "create", "get", "update", "remove"])
|
||||
expect(Object.keys(client.file)).toEqual(["read", "list", "find"])
|
||||
expect(Object.keys(client.pty)).toEqual(["list", "create", "get", "update", "remove"])
|
||||
expect(Object.keys(client.shell)).toEqual(["list", "create", "get", "output", "remove"])
|
||||
expect(Object.keys(client.project)).toEqual(["current", "directories"])
|
||||
})
|
||||
|
||||
test("sessions.get returns the wire projection", async () => {
|
||||
test("file.read returns binary content from the public HTTP contract", async () => {
|
||||
let request: Request | undefined
|
||||
const client = OpenCode.make({
|
||||
baseUrl: "http://localhost:3000",
|
||||
fetch: async (input) => {
|
||||
request = input instanceof Request ? input : new Request(input)
|
||||
return new Response(new Uint8Array([104, 105]))
|
||||
},
|
||||
})
|
||||
|
||||
const content = await client.file.read({
|
||||
path: "src/a b#c.ts",
|
||||
location: { directory: "/tmp/project" },
|
||||
})
|
||||
|
||||
expect(Array.from(content)).toEqual([104, 105])
|
||||
expect(request?.url).toBe(
|
||||
"http://localhost:3000/api/fs/read/src/a%20b%23c.ts?location%5Bdirectory%5D=%2Ftmp%2Fproject",
|
||||
)
|
||||
})
|
||||
|
||||
test("project methods use the public HTTP contract", async () => {
|
||||
const requests: string[] = []
|
||||
const client = OpenCode.make({
|
||||
baseUrl: "http://localhost:3000",
|
||||
fetch: async (input) => {
|
||||
const url = typeof input === "string" ? input : input instanceof URL ? input.href : input.url
|
||||
requests.push(url)
|
||||
if (url.includes("/directories")) return Response.json([])
|
||||
return Response.json({ id: "proj_test", directory: "/tmp/project" })
|
||||
},
|
||||
})
|
||||
|
||||
const current = await client.project.current({ location: { workspace: "wrk_test" } })
|
||||
const directories = await client.project.directories({
|
||||
projectID: current.id,
|
||||
location: { directory: current.directory },
|
||||
})
|
||||
|
||||
expect(current).toEqual({ id: "proj_test", directory: "/tmp/project" })
|
||||
expect(directories).toEqual([])
|
||||
expect(requests).toEqual([
|
||||
"http://localhost:3000/api/project/current?location%5Bworkspace%5D=wrk_test",
|
||||
"http://localhost:3000/api/project/proj_test/directories?location%5Bdirectory%5D=%2Ftmp%2Fproject",
|
||||
])
|
||||
})
|
||||
|
||||
test("shell list and remove use the public HTTP contract", async () => {
|
||||
const requests: Array<{ method: string; url: string }> = []
|
||||
const shell = {
|
||||
id: "sh_test",
|
||||
status: "running",
|
||||
command: "pwd",
|
||||
cwd: "/tmp/project",
|
||||
shell: "/bin/zsh",
|
||||
file: "/tmp/opencode-shell",
|
||||
metadata: { sessionID: "ses_test" },
|
||||
time: { started: 1_717_171_717_000 },
|
||||
}
|
||||
const client = OpenCode.make({
|
||||
baseUrl: "http://localhost:3000",
|
||||
fetch: async (input, init) => {
|
||||
const request = input instanceof Request ? input : new Request(input, init)
|
||||
requests.push({ method: request.method, url: request.url })
|
||||
if (request.method === "DELETE") return new Response(null, { status: 204 })
|
||||
return Response.json({
|
||||
location: { directory: "/tmp/project", project: { id: "proj_test", directory: "/tmp/project" } },
|
||||
data: [shell],
|
||||
})
|
||||
},
|
||||
})
|
||||
|
||||
const result = await client.shell.list({ location: { directory: "/tmp/project" } })
|
||||
await client.shell.remove({ id: shell.id })
|
||||
|
||||
expect(result.data).toEqual([shell])
|
||||
expect(requests).toEqual([
|
||||
{ method: "GET", url: "http://localhost:3000/api/shell?location%5Bdirectory%5D=%2Ftmp%2Fproject" },
|
||||
{ method: "DELETE", url: "http://localhost:3000/api/shell/sh_test" },
|
||||
])
|
||||
})
|
||||
|
||||
test("session.get returns the wire projection", async () => {
|
||||
const client = OpenCode.make({
|
||||
baseUrl: "http://localhost:3000",
|
||||
fetch: async (input) => {
|
||||
|
|
@ -50,12 +136,12 @@ test("sessions.get returns the wire projection", async () => {
|
|||
},
|
||||
})
|
||||
|
||||
const result = await client.sessions.get({ sessionID: "ses_test" })
|
||||
const result = await client.session.get({ sessionID: "ses_test" })
|
||||
|
||||
expect(result.time.created).toBe(1_717_171_717_000)
|
||||
})
|
||||
|
||||
test("events.subscribe exposes the Promise event stream wire projection", async () => {
|
||||
test("event.subscribe exposes the Promise event stream wire projection", async () => {
|
||||
const client = OpenCode.make({
|
||||
baseUrl: "http://localhost:3000",
|
||||
fetch: async () =>
|
||||
|
|
@ -66,19 +152,19 @@ test("events.subscribe exposes the Promise event stream wire projection", async
|
|||
),
|
||||
})
|
||||
const events = []
|
||||
for await (const event of client.events.subscribe()) events.push(event)
|
||||
for await (const event of client.event.subscribe()) events.push(event)
|
||||
|
||||
expect(events).toEqual([{ id: "evt_connected", type: "server.connected", data: {} }, modelSwitchedEvent])
|
||||
expect(events[1]?.type === "session.next.model.switched" && events[1].data.timestamp).toBe(1_717_171_717_000)
|
||||
})
|
||||
|
||||
test("events.subscribe terminates on malformed Promise SSE data", async () => {
|
||||
test("event.subscribe terminates on malformed Promise SSE data", async () => {
|
||||
const client = OpenCode.make({
|
||||
baseUrl: "http://localhost:3000",
|
||||
fetch: async () => new Response("data: {not-json}\n\n", { headers: { "content-type": "text/event-stream" } }),
|
||||
})
|
||||
|
||||
await expect(client.events.subscribe()[Symbol.asyncIterator]().next()).rejects.toMatchObject({
|
||||
await expect(client.event.subscribe()[Symbol.asyncIterator]().next()).rejects.toMatchObject({
|
||||
name: "ClientError",
|
||||
reason: "MalformedResponse",
|
||||
})
|
||||
|
|
@ -113,31 +199,31 @@ test("session methods use the public HTTP contract", async () => {
|
|||
},
|
||||
})
|
||||
|
||||
const page = await client.sessions.list({ limit: 10, order: "desc" })
|
||||
const active = await client.sessions.active()
|
||||
const created = await client.sessions.create({ location: { directory: "/tmp/project" } })
|
||||
await client.sessions.switchAgent({ sessionID: "ses_test", agent: "build" })
|
||||
await client.sessions.switchModel({
|
||||
const page = await client.session.list({ limit: 10, order: "desc" })
|
||||
const active = await client.session.active()
|
||||
const created = await client.session.create({ location: { directory: "/tmp/project" } })
|
||||
await client.session.switchAgent({ sessionID: "ses_test", agent: "build" })
|
||||
await client.session.switchModel({
|
||||
sessionID: "ses_test",
|
||||
model: { id: "claude", providerID: "anthropic" },
|
||||
})
|
||||
const admitted = await client.sessions.prompt({
|
||||
const admitted = await client.session.prompt({
|
||||
sessionID: "ses_test",
|
||||
prompt: { text: "Hello" },
|
||||
resume: false,
|
||||
})
|
||||
await client.sessions.compact({ sessionID: "ses_test" })
|
||||
await client.sessions.wait({ sessionID: "ses_test" })
|
||||
const context = await client.sessions.context({ sessionID: "ses_test" })
|
||||
const history = await client.sessions.history({ sessionID: "ses_test", after: 0, limit: 1 })
|
||||
await client.session.compact({ sessionID: "ses_test" })
|
||||
await client.session.wait({ sessionID: "ses_test" })
|
||||
const context = await client.session.context({ sessionID: "ses_test" })
|
||||
const history = await client.session.history({ sessionID: "ses_test", after: 0, limit: 1 })
|
||||
const historyAfter = history.data.at(-1)?.durable?.seq
|
||||
const historyNext = history.hasMore
|
||||
? await client.sessions.history({ sessionID: "ses_test", after: historyAfter, limit: 2 })
|
||||
? await client.session.history({ sessionID: "ses_test", after: historyAfter, limit: 2 })
|
||||
: undefined
|
||||
const events = []
|
||||
for await (const event of client.sessions.events({ sessionID: "ses_test", after: 0 })) events.push(event)
|
||||
await client.sessions.interrupt({ sessionID: "ses_test" })
|
||||
const message = await client.sessions.message({ sessionID: "ses_test", messageID: "msg_model" })
|
||||
for await (const event of client.session.events({ sessionID: "ses_test", after: 0 })) events.push(event)
|
||||
await client.session.interrupt({ sessionID: "ses_test" })
|
||||
const message = await client.session.message({ sessionID: "ses_test", messageID: "msg_model" })
|
||||
|
||||
expect(page.cursor.next).toBe("next")
|
||||
expect(active).toEqual({ ses_test: { type: "running" } })
|
||||
|
|
@ -180,14 +266,14 @@ test("middleware errors remain declared client errors", async () => {
|
|||
})
|
||||
|
||||
try {
|
||||
await client.sessions.create({})
|
||||
await client.session.create({})
|
||||
throw new Error("Expected request to fail")
|
||||
} catch (error) {
|
||||
expect(isUnauthorizedError(error)).toBe(true)
|
||||
}
|
||||
})
|
||||
|
||||
test("sessions.history decodes SessionNotFoundError", async () => {
|
||||
test("session.history decodes SessionNotFoundError", async () => {
|
||||
const client = OpenCode.make({
|
||||
baseUrl: "http://localhost:3000",
|
||||
fetch: async () =>
|
||||
|
|
@ -198,7 +284,7 @@ test("sessions.history decodes SessionNotFoundError", async () => {
|
|||
})
|
||||
|
||||
try {
|
||||
await client.sessions.history({ sessionID: "ses_missing" })
|
||||
await client.session.history({ sessionID: "ses_missing" })
|
||||
throw new Error("Expected request to fail")
|
||||
} catch (error) {
|
||||
expect(isSessionNotFoundError(error)).toBe(true)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue