openAgent
gitlabThe open source UNIVERSAL agent.
clone
https://gitlab.com/bitzzdev/openAgent.gitAIagentautomationopen-sourceuniversal-agent
import type {HealthGetOutput,LocationGetInput,LocationGetOutput,AgentsListInput,AgentsListOutput,SessionsListInput,SessionsListOutput,SessionsCreateInput,SessionsCreateOutput,SessionsActiveOutput,SessionsGetInput,SessionsGetOutput,SessionsSwitchAgentInput,SessionsSwitchAgentOutput,SessionsSwitchModelInput,SessionsSwitchModelOutput,SessionsPromptInput,SessionsPromptOutput,SessionsCompactInput,SessionsCompactOutput,SessionsWaitInput,SessionsWaitOutput,SessionsStageInput,SessionsStageOutput,SessionsClearInput,SessionsClearOutput,SessionsCommitInput,SessionsCommitOutput,SessionsContextInput,SessionsContextOutput,SessionsHistoryInput,SessionsHistoryOutput,SessionsEventsInput,SessionsEventsOutput,SessionsInterruptInput,SessionsInterruptOutput,SessionsMessageInput,SessionsMessageOutput,MessagesListInput,MessagesListOutput,ModelsListInput,ModelsListOutput,ProvidersListInput,ProvidersListOutput,ProvidersGetInput,ProvidersGetOutput,IntegrationsListInput,IntegrationsListOutput,IntegrationsGetInput,IntegrationsGetOutput,IntegrationsConnectKeyInput,IntegrationsConnectKeyOutput,IntegrationsConnectOauthInput,IntegrationsConnectOauthOutput,IntegrationsAttemptStatusInput,IntegrationsAttemptStatusOutput,IntegrationsAttemptCompleteInput,IntegrationsAttemptCompleteOutput,IntegrationsAttemptCancelInput,IntegrationsAttemptCancelOutput,CredentialsUpdateInput,CredentialsUpdateOutput,CredentialsRemoveInput,CredentialsRemoveOutput,PermissionsListRequestsInput,PermissionsListRequestsOutput,PermissionsListSavedInput,PermissionsListSavedOutput,PermissionsRemoveSavedInput,PermissionsRemoveSavedOutput,PermissionsCreateInput,PermissionsCreateOutput,PermissionsListInput,PermissionsListOutput,PermissionsGetInput,PermissionsGetOutput,PermissionsReplyInput,PermissionsReplyOutput,FilesListInput,FilesListOutput,FilesFindInput,FilesFindOutput,CommandsListInput,CommandsListOutput,SkillsListInput,SkillsListOutput,EventsSubscribeOutput,PtysListInput,PtysListOutput,PtysCreateInput,PtysCreateOutput,PtysGetInput,PtysGetOutput,PtysUpdateInput,PtysUpdateOutput,PtysRemoveInput,PtysRemoveOutput,QuestionsListRequestsInput,QuestionsListRequestsOutput,QuestionsListInput,QuestionsListOutput,QuestionsReplyInput,QuestionsReplyOutput,QuestionsRejectInput,QuestionsRejectOutput,ReferencesListInput,ReferencesListOutput,ProjectCopiesCreateInput,ProjectCopiesCreateOutput,ProjectCopiesRemoveInput,ProjectCopiesRemoveOutput,ProjectCopiesRefreshInput,ProjectCopiesRefreshOutput,} from "./types"import { ClientError } from "./client-error"export interface ClientOptions {readonly baseUrl: stringreadonly fetch?: typeof globalThis.fetchreadonly headers?: HeadersInit}export interface RequestOptions {readonly signal?: AbortSignalreadonly headers?: HeadersInit}interface RequestDescriptor {readonly method: stringreadonly path: stringreadonly query?: Record<string, unknown>readonly headers?: Record<string, unknown>readonly body?: unknownreadonly successStatus: numberreadonly declaredStatuses: ReadonlyArray<number>readonly empty: boolean}export function make(options: ClientOptions) {const fetch = options.fetch ?? globalThis.fetchconst prepare = (descriptor: RequestDescriptor, requestOptions?: RequestOptions) => {const url = new URL(descriptor.path, options.baseUrl)for (const [key, value] of Object.entries(descriptor.query ?? {})) appendQuery(url.searchParams, key, value)const headers = new Headers(options.headers)for (const [key, value] of Object.entries(descriptor.headers ?? {})) {if (value !== undefined && value !== null) headers.set(key, String(value))}for (const [key, value] of new Headers(requestOptions?.headers)) headers.set(key, value)if (descriptor.body !== undefined && !headers.has("content-type")) headers.set("content-type", "application/json")return {url,init: {method: descriptor.method,signal: requestOptions?.signal,headers,body: descriptor.body === undefined ? undefined : JSON.stringify(descriptor.body),} satisfies RequestInit,}}const execute = async (descriptor: RequestDescriptor, requestOptions?: RequestOptions) => {try {const prepared = prepare(descriptor, requestOptions)return await fetch(prepared.url, prepared.init)} catch (cause) {throw new ClientError("Transport", { cause })}}const responseError = async (response: Response, descriptor: RequestDescriptor): Promise<never> => {if (descriptor.declaredStatuses.includes(response.status)) throw await json(response)try {await response.body?.cancel()} catch {}throw new ClientError("UnexpectedStatus", { cause: { status: response.status } })}const request = async <A>(descriptor: RequestDescriptor, requestOptions?: RequestOptions): Promise<A> => {const response = await execute(descriptor, requestOptions)if (response.status !== descriptor.successStatus) return responseError(response, descriptor)if (descriptor.empty) {try {await response.body?.cancel()} catch {}return undefined as A}return (await json(response)) as A}const sse = <A>(descriptor: RequestDescriptor, requestOptions?: RequestOptions): AsyncIterable<A> => ({async *[Symbol.asyncIterator]() {const response = await execute(descriptor, requestOptions)if (response.status !== descriptor.successStatus) await responseError(response, descriptor)if (!isContentType(response, "text/event-stream")) {try {await response.body?.cancel()} catch {}throw new ClientError("UnsupportedContentType")}if (response.body === null) throw new ClientError("MalformedResponse")const reader = response.body.getReader()const decoder = new TextDecoder()let buffer = ""try {while (true) {let nexttry {next = await reader.read()} catch (cause) {throw new ClientError("Transport", { cause })}buffer += decoder.decode(next.value, { stream: !next.done })if (buffer.length > 1_048_576) throw new ClientError("MalformedResponse")const trailingCarriageReturn = !next.done && buffer.endsWith("\r")if (trailingCarriageReturn) buffer = buffer.slice(0, -1)buffer = buffer.replaceAll("\r\n", "\n").replaceAll("\r", "\n")if (trailingCarriageReturn) buffer += "\r"if (next.done && buffer !== "") buffer += "\n\n"let boundary = buffer.indexOf("\n\n")while (boundary >= 0) {const block = buffer.slice(0, boundary)buffer = buffer.slice(boundary + 2)const data = block.split("\n").flatMap((line) => (line.startsWith("data:") ? [line.slice(5).trimStart()] : [])).join("\n")if (data !== "") {try {yield JSON.parse(data) as A} catch (cause) {throw new ClientError("MalformedResponse", { cause })}}boundary = buffer.indexOf("\n\n")}if (next.done) return}} finally {try {await reader.cancel()} catch {}reader.releaseLock()}},})return {health: {get: (requestOptions?: RequestOptions) =>request<HealthGetOutput>({ method: "GET", path: `/api/health`, successStatus: 200, declaredStatuses: [401, 400], empty: false },requestOptions,),},location: {get: (input?: LocationGetInput, requestOptions?: RequestOptions) =>request<LocationGetOutput>({method: "GET",path: `/api/location`,query: { location: input?.["location"] },successStatus: 200,declaredStatuses: [401, 400],empty: false,},requestOptions,),},agents: {list: (input?: AgentsListInput, requestOptions?: RequestOptions) =>request<AgentsListOutput>({method: "GET",path: `/api/agent`,query: { location: input?.["location"] },successStatus: 200,declaredStatuses: [401, 400],empty: false,},requestOptions,),},sessions: {list: (input?: SessionsListInput, requestOptions?: RequestOptions) =>request<SessionsListOutput>({method: "GET",path: `/api/session`,query: {workspace: input?.["workspace"],limit: input?.["limit"],order: input?.["order"],search: input?.["search"],directory: input?.["directory"],project: input?.["project"],subpath: input?.["subpath"],cursor: input?.["cursor"],},successStatus: 200,declaredStatuses: [400, 401],empty: false,},requestOptions,),create: (input?: SessionsCreateInput, requestOptions?: RequestOptions) =>request<{ readonly data: SessionsCreateOutput }>({method: "POST",path: `/api/session`,body: {id: input?.["id"],agent: input?.["agent"],model: input?.["model"],location: input?.["location"],},successStatus: 200,declaredStatuses: [401, 400],empty: false,},requestOptions,).then((value) => value.data),active: (requestOptions?: RequestOptions) =>request<{ readonly data: SessionsActiveOutput }>({method: "GET",path: `/api/session/active`,successStatus: 200,declaredStatuses: [401, 400],empty: false,},requestOptions,).then((value) => value.data),get: (input: SessionsGetInput, requestOptions?: RequestOptions) =>request<{ readonly data: SessionsGetOutput }>({method: "GET",path: `/api/session/${encodeURIComponent(input.sessionID)}`,successStatus: 200,declaredStatuses: [404, 400, 401],empty: false,},requestOptions,).then((value) => value.data),switchAgent: (input: SessionsSwitchAgentInput, requestOptions?: RequestOptions) =>request<SessionsSwitchAgentOutput>({method: "POST",path: `/api/session/${encodeURIComponent(input.sessionID)}/agent`,body: { agent: input["agent"] },successStatus: 204,declaredStatuses: [404, 400, 401],empty: true,},requestOptions,),switchModel: (input: SessionsSwitchModelInput, requestOptions?: RequestOptions) =>request<SessionsSwitchModelOutput>({method: "POST",path: `/api/session/${encodeURIComponent(input.sessionID)}/model`,body: { model: input["model"] },successStatus: 204,declaredStatuses: [404, 400, 401],empty: true,},requestOptions,),prompt: (input: SessionsPromptInput, requestOptions?: RequestOptions) =>request<{ readonly data: SessionsPromptOutput }>({method: "POST",path: `/api/session/${encodeURIComponent(input.sessionID)}/prompt`,body: { id: input["id"], prompt: input["prompt"], delivery: input["delivery"], resume: input["resume"] },successStatus: 200,declaredStatuses: [409, 404, 400, 401],empty: false,},requestOptions,).then((value) => value.data),compact: (input: SessionsCompactInput, requestOptions?: RequestOptions) =>request<SessionsCompactOutput>({method: "POST",path: `/api/session/${encodeURIComponent(input.sessionID)}/compact`,successStatus: 204,declaredStatuses: [404, 503, 400, 401],empty: true,},requestOptions,),wait: (input: SessionsWaitInput, requestOptions?: RequestOptions) =>request<SessionsWaitOutput>({method: "POST",path: `/api/session/${encodeURIComponent(input.sessionID)}/wait`,successStatus: 204,declaredStatuses: [404, 503, 400, 401],empty: true,},requestOptions,),stage: (input: SessionsStageInput, requestOptions?: RequestOptions) =>request<{ readonly data: SessionsStageOutput }>({method: "POST",path: `/api/session/${encodeURIComponent(input.sessionID)}/revert/stage`,body: { messageID: input["messageID"], files: input["files"] },successStatus: 200,declaredStatuses: [404, 500, 400, 401],empty: false,},requestOptions,).then((value) => value.data),clear: (input: SessionsClearInput, requestOptions?: RequestOptions) =>request<SessionsClearOutput>({method: "POST",path: `/api/session/${encodeURIComponent(input.sessionID)}/revert/clear`,successStatus: 204,declaredStatuses: [404, 500, 400, 401],empty: true,},requestOptions,),commit: (input: SessionsCommitInput, requestOptions?: RequestOptions) =>request<SessionsCommitOutput>({method: "POST",path: `/api/session/${encodeURIComponent(input.sessionID)}/revert/commit`,successStatus: 204,declaredStatuses: [404, 400, 401],empty: true,},requestOptions,),context: (input: SessionsContextInput, requestOptions?: RequestOptions) =>request<{ readonly data: SessionsContextOutput }>({method: "GET",path: `/api/session/${encodeURIComponent(input.sessionID)}/context`,successStatus: 200,declaredStatuses: [404, 500, 400, 401],empty: false,},requestOptions,).then((value) => value.data),history: (input: SessionsHistoryInput, requestOptions?: RequestOptions) =>request<SessionsHistoryOutput>({method: "GET",path: `/api/session/${encodeURIComponent(input.sessionID)}/history`,query: { limit: input["limit"], after: input["after"] },successStatus: 200,declaredStatuses: [404, 400, 401],empty: false,},requestOptions,),events: (input: SessionsEventsInput, requestOptions?: RequestOptions): AsyncIterable<SessionsEventsOutput> =>sse<SessionsEventsOutput>({method: "GET",path: `/api/session/${encodeURIComponent(input.sessionID)}/event`,query: { after: input["after"] },successStatus: 200,declaredStatuses: [404, 400, 401],empty: false,},requestOptions,),interrupt: (input: SessionsInterruptInput, requestOptions?: RequestOptions) =>request<SessionsInterruptOutput>({method: "POST",path: `/api/session/${encodeURIComponent(input.sessionID)}/interrupt`,successStatus: 204,declaredStatuses: [404, 400, 401],empty: true,},requestOptions,),message: (input: SessionsMessageInput, requestOptions?: RequestOptions) =>request<{ readonly data: SessionsMessageOutput }>({method: "GET",path: `/api/session/${encodeURIComponent(input.sessionID)}/message/${encodeURIComponent(input.messageID)}`,successStatus: 200,declaredStatuses: [404, 400, 401],empty: false,},requestOptions,).then((value) => value.data),},messages: {list: (input: MessagesListInput, requestOptions?: RequestOptions) =>request<MessagesListOutput>({method: "GET",path: `/api/session/${encodeURIComponent(input.sessionID)}/message`,query: { limit: input["limit"], order: input["order"], cursor: input["cursor"] },successStatus: 200,declaredStatuses: [400, 404, 500, 401],empty: false,},requestOptions,),},models: {list: (input?: ModelsListInput, requestOptions?: RequestOptions) =>request<ModelsListOutput>({method: "GET",path: `/api/model`,query: { location: input?.["location"] },successStatus: 200,declaredStatuses: [503, 401, 400],empty: false,},requestOptions,),},providers: {list: (input?: ProvidersListInput, requestOptions?: RequestOptions) =>request<ProvidersListOutput>({method: "GET",path: `/api/provider`,query: { location: input?.["location"] },successStatus: 200,declaredStatuses: [503, 401, 400],empty: false,},requestOptions,),get: (input: ProvidersGetInput, requestOptions?: RequestOptions) =>request<ProvidersGetOutput>({method: "GET",path: `/api/provider/${encodeURIComponent(input.providerID)}`,query: { location: input["location"] },successStatus: 200,declaredStatuses: [404, 503, 401, 400],empty: false,},requestOptions,),},integrations: {list: (input?: IntegrationsListInput, requestOptions?: RequestOptions) =>request<IntegrationsListOutput>({method: "GET",path: `/api/integration`,query: { location: input?.["location"] },successStatus: 200,declaredStatuses: [401, 400],empty: false,},requestOptions,),get: (input: IntegrationsGetInput, requestOptions?: RequestOptions) =>request<IntegrationsGetOutput>({method: "GET",path: `/api/integration/${encodeURIComponent(input.integrationID)}`,query: { location: input["location"] },successStatus: 200,declaredStatuses: [401, 400],empty: false,},requestOptions,),connectKey: (input: IntegrationsConnectKeyInput, requestOptions?: RequestOptions) =>request<IntegrationsConnectKeyOutput>({method: "POST",path: `/api/integration/${encodeURIComponent(input.integrationID)}/connect/key`,query: { location: input["location"] },body: { key: input["key"], label: input["label"] },successStatus: 204,declaredStatuses: [400, 401],empty: true,},requestOptions,),connectOauth: (input: IntegrationsConnectOauthInput, requestOptions?: RequestOptions) =>request<IntegrationsConnectOauthOutput>({method: "POST",path: `/api/integration/${encodeURIComponent(input.integrationID)}/connect/oauth`,query: { location: input["location"] },body: { methodID: input["methodID"], inputs: input["inputs"], label: input["label"] },successStatus: 200,declaredStatuses: [400, 401],empty: false,},requestOptions,),attemptStatus: (input: IntegrationsAttemptStatusInput, requestOptions?: RequestOptions) =>request<IntegrationsAttemptStatusOutput>({method: "GET",path: `/api/integration/attempt/${encodeURIComponent(input.attemptID)}`,query: { location: input["location"] },successStatus: 200,declaredStatuses: [401, 400],empty: false,},requestOptions,),attemptComplete: (input: IntegrationsAttemptCompleteInput, requestOptions?: RequestOptions) =>request<IntegrationsAttemptCompleteOutput>({method: "POST",path: `/api/integration/attempt/${encodeURIComponent(input.attemptID)}/complete`,query: { location: input["location"] },body: { code: input["code"] },successStatus: 204,declaredStatuses: [400, 401],empty: true,},requestOptions,),attemptCancel: (input: IntegrationsAttemptCancelInput, requestOptions?: RequestOptions) =>request<IntegrationsAttemptCancelOutput>({method: "DELETE",path: `/api/integration/attempt/${encodeURIComponent(input.attemptID)}`,query: { location: input["location"] },successStatus: 204,declaredStatuses: [401, 400],empty: true,},requestOptions,),},credentials: {update: (input: CredentialsUpdateInput, requestOptions?: RequestOptions) =>request<CredentialsUpdateOutput>({method: "PATCH",path: `/api/credential/${encodeURIComponent(input.credentialID)}`,query: { location: input["location"] },body: { label: input["label"] },successStatus: 204,declaredStatuses: [401, 400],empty: true,},requestOptions,),remove: (input: CredentialsRemoveInput, requestOptions?: RequestOptions) =>request<CredentialsRemoveOutput>({method: "DELETE",path: `/api/credential/${encodeURIComponent(input.credentialID)}`,query: { location: input["location"] },successStatus: 204,declaredStatuses: [401, 400],empty: true,},requestOptions,),},permissions: {listRequests: (input?: PermissionsListRequestsInput, requestOptions?: RequestOptions) =>request<PermissionsListRequestsOutput>({method: "GET",path: `/api/permission/request`,query: { location: input?.["location"] },successStatus: 200,declaredStatuses: [401, 400],empty: false,},requestOptions,),listSaved: (input?: PermissionsListSavedInput, requestOptions?: RequestOptions) =>request<{ readonly data: PermissionsListSavedOutput }>({method: "GET",path: `/api/permission/saved`,query: { projectID: input?.["projectID"] },successStatus: 200,declaredStatuses: [401, 400],empty: false,},requestOptions,).then((value) => value.data),removeSaved: (input: PermissionsRemoveSavedInput, requestOptions?: RequestOptions) =>request<PermissionsRemoveSavedOutput>({method: "DELETE",path: `/api/permission/saved/${encodeURIComponent(input.id)}`,successStatus: 204,declaredStatuses: [401, 400],empty: true,},requestOptions,),create: (input: PermissionsCreateInput, requestOptions?: RequestOptions) =>request<{ readonly data: PermissionsCreateOutput }>({method: "POST",path: `/api/session/${encodeURIComponent(input.sessionID)}/permission`,body: {id: input["id"],action: input["action"],resources: input["resources"],save: input["save"],metadata: input["metadata"],source: input["source"],agent: input["agent"],},successStatus: 200,declaredStatuses: [404, 400, 401],empty: false,},requestOptions,).then((value) => value.data),list: (input: PermissionsListInput, requestOptions?: RequestOptions) =>request<{ readonly data: PermissionsListOutput }>({method: "GET",path: `/api/session/${encodeURIComponent(input.sessionID)}/permission`,successStatus: 200,declaredStatuses: [404, 400, 401],empty: false,},requestOptions,).then((value) => value.data),get: (input: PermissionsGetInput, requestOptions?: RequestOptions) =>request<{ readonly data: PermissionsGetOutput }>({method: "GET",path: `/api/session/${encodeURIComponent(input.sessionID)}/permission/${encodeURIComponent(input.requestID)}`,successStatus: 200,declaredStatuses: [404, 400, 401],empty: false,},requestOptions,).then((value) => value.data),reply: (input: PermissionsReplyInput, requestOptions?: RequestOptions) =>request<PermissionsReplyOutput>({method: "POST",path: `/api/session/${encodeURIComponent(input.sessionID)}/permission/${encodeURIComponent(input.requestID)}/reply`,body: { reply: input["reply"], message: input["message"] },successStatus: 204,declaredStatuses: [404, 400, 401],empty: true,},requestOptions,),},files: {list: (input?: FilesListInput, requestOptions?: RequestOptions) =>request<FilesListOutput>({method: "GET",path: `/api/fs/list`,query: { location: input?.["location"], path: input?.["path"] },successStatus: 200,declaredStatuses: [401, 400],empty: false,},requestOptions,),find: (input: FilesFindInput, requestOptions?: RequestOptions) =>request<FilesFindOutput>({method: "GET",path: `/api/fs/find`,query: { location: input["location"], query: input["query"], type: input["type"], limit: input["limit"] },successStatus: 200,declaredStatuses: [401, 400],empty: false,},requestOptions,),},commands: {list: (input?: CommandsListInput, requestOptions?: RequestOptions) =>request<CommandsListOutput>({method: "GET",path: `/api/command`,query: { location: input?.["location"] },successStatus: 200,declaredStatuses: [401, 400],empty: false,},requestOptions,),},skills: {list: (input?: SkillsListInput, requestOptions?: RequestOptions) =>request<SkillsListOutput>({method: "GET",path: `/api/skill`,query: { location: input?.["location"] },successStatus: 200,declaredStatuses: [401, 400],empty: false,},requestOptions,),},events: {subscribe: (requestOptions?: RequestOptions): AsyncIterable<EventsSubscribeOutput> =>sse<EventsSubscribeOutput>({ method: "GET", path: `/api/event`, successStatus: 200, declaredStatuses: [401, 400], empty: false },requestOptions,),},ptys: {list: (input?: PtysListInput, requestOptions?: RequestOptions) =>request<PtysListOutput>({method: "GET",path: `/api/pty`,query: { location: input?.["location"] },successStatus: 200,declaredStatuses: [401, 400],empty: false,},requestOptions,),create: (input?: PtysCreateInput, requestOptions?: RequestOptions) =>request<PtysCreateOutput>({method: "POST",path: `/api/pty`,query: { location: input?.["location"] },body: {command: input?.["command"],args: input?.["args"],cwd: input?.["cwd"],title: input?.["title"],env: input?.["env"],},successStatus: 200,declaredStatuses: [401, 400],empty: false,},requestOptions,),get: (input: PtysGetInput, requestOptions?: RequestOptions) =>request<PtysGetOutput>({method: "GET",path: `/api/pty/${encodeURIComponent(input.ptyID)}`,query: { location: input["location"] },successStatus: 200,declaredStatuses: [404, 401, 400],empty: false,},requestOptions,),update: (input: PtysUpdateInput, requestOptions?: RequestOptions) =>request<PtysUpdateOutput>({method: "PUT",path: `/api/pty/${encodeURIComponent(input.ptyID)}`,query: { location: input["location"] },body: { title: input["title"], size: input["size"] },successStatus: 200,declaredStatuses: [404, 401, 400],empty: false,},requestOptions,),remove: (input: PtysRemoveInput, requestOptions?: RequestOptions) =>request<PtysRemoveOutput>({method: "DELETE",path: `/api/pty/${encodeURIComponent(input.ptyID)}`,query: { location: input["location"] },successStatus: 204,declaredStatuses: [404, 401, 400],empty: true,},requestOptions,),},questions: {listRequests: (input?: QuestionsListRequestsInput, requestOptions?: RequestOptions) =>request<QuestionsListRequestsOutput>({method: "GET",path: `/api/question/request`,query: { location: input?.["location"] },successStatus: 200,declaredStatuses: [401, 400],empty: false,},requestOptions,),list: (input: QuestionsListInput, requestOptions?: RequestOptions) =>request<{ readonly data: QuestionsListOutput }>({method: "GET",path: `/api/session/${encodeURIComponent(input.sessionID)}/question`,successStatus: 200,declaredStatuses: [404, 400, 401],empty: false,},requestOptions,).then((value) => value.data),reply: (input: QuestionsReplyInput, requestOptions?: RequestOptions) =>request<QuestionsReplyOutput>({method: "POST",path: `/api/session/${encodeURIComponent(input.sessionID)}/question/${encodeURIComponent(input.requestID)}/reply`,body: { answers: input["answers"] },successStatus: 204,declaredStatuses: [404, 400, 401],empty: true,},requestOptions,),reject: (input: QuestionsRejectInput, requestOptions?: RequestOptions) =>request<QuestionsRejectOutput>({method: "POST",path: `/api/session/${encodeURIComponent(input.sessionID)}/question/${encodeURIComponent(input.requestID)}/reject`,successStatus: 204,declaredStatuses: [404, 400, 401],empty: true,},requestOptions,),},references: {list: (input?: ReferencesListInput, requestOptions?: RequestOptions) =>request<ReferencesListOutput>({method: "GET",path: `/api/reference`,query: { location: input?.["location"] },successStatus: 200,declaredStatuses: [401, 400],empty: false,},requestOptions,),},projectCopies: {create: (input: ProjectCopiesCreateInput, requestOptions?: RequestOptions) =>request<ProjectCopiesCreateOutput>({method: "POST",path: `/experimental/project/${encodeURIComponent(input.projectID)}/copy`,query: { location: input["location"] },body: { strategy: input["strategy"], directory: input["directory"], name: input["name"] },successStatus: 200,declaredStatuses: [400, 401],empty: false,},requestOptions,),remove: (input: ProjectCopiesRemoveInput, requestOptions?: RequestOptions) =>request<ProjectCopiesRemoveOutput>({method: "DELETE",path: `/experimental/project/${encodeURIComponent(input.projectID)}/copy`,query: { location: input["location"] },body: { directory: input["directory"], force: input["force"] },successStatus: 204,declaredStatuses: [400, 401],empty: true,},requestOptions,),refresh: (input: ProjectCopiesRefreshInput, requestOptions?: RequestOptions) =>request<ProjectCopiesRefreshOutput>({method: "POST",path: `/experimental/project/${encodeURIComponent(input.projectID)}/copy/refresh`,query: { location: input["location"] },successStatus: 204,declaredStatuses: [400, 401],empty: true,},requestOptions,),},}}function appendQuery(params: URLSearchParams, key: string, value: unknown): void {if (value === undefined || value === null) returnif (Array.isArray(value)) {for (const item of value) appendQuery(params, key, item)return}if (typeof value === "object") {for (const [child, item] of Object.entries(value)) appendQuery(params, `${key}[${child}]`, item)return}params.append(key, String(value))}async function json(response: Response): Promise<unknown> {if (!isContentType(response, "application/json") && !response.headers.get("content-type")?.includes("+json")) {try {await response.body?.cancel()} catch {}throw new ClientError("UnsupportedContentType")}let text: stringtry {text = await response.text()} catch (cause) {throw new ClientError("Transport", { cause })}if (text === "") throw new ClientError("MalformedResponse")try {return JSON.parse(text)} catch (cause) {throw new ClientError("MalformedResponse", { cause })}}function isContentType(response: Response, expected: string) {return response.headers.get("content-type")?.split(";", 1)[0]?.trim().toLowerCase() === expected}