summaryrefslogtreecommitdiffhomepage
path: root/packages
diff options
context:
space:
mode:
authoropencode <[email protected]>2025-09-17 07:14:33 +0000
committeropencode <[email protected]>2025-09-17 07:14:33 +0000
commite618cbc4470bf66cf7f905053d1a5bf368aefd3a (patch)
tree631d99a0fd0a12a9497a8955eb3737e7730d7fb7 /packages
parentabd99aeb7db5564cbfdf99b42e6a10bf3ccbafd5 (diff)
downloadopencode-e618cbc4470bf66cf7f905053d1a5bf368aefd3a.tar.gz
opencode-e618cbc4470bf66cf7f905053d1a5bf368aefd3a.zip
release: v0.9.8
Diffstat (limited to 'packages')
-rw-r--r--packages/app/package.json2
-rw-r--r--packages/function/package.json2
-rw-r--r--packages/opencode/package.json2
-rw-r--r--packages/plugin/package.json2
-rw-r--r--packages/sdk/js/package.json2
-rw-r--r--packages/sdk/js/src/gen/client/client.gen.ts98
-rw-r--r--packages/sdk/js/src/gen/client/types.gen.ts12
-rw-r--r--packages/sdk/js/src/gen/client/utils.gen.ts12
-rw-r--r--packages/sdk/js/src/gen/core/serverSentEvents.gen.ts29
-rw-r--r--packages/sdk/js/src/gen/core/types.gen.ts19
-rw-r--r--packages/sdk/js/src/gen/core/utils.gen.ts30
-rw-r--r--packages/sdk/js/src/gen/sdk.gen.ts2
-rw-r--r--packages/web/package.json2
13 files changed, 61 insertions, 153 deletions
diff --git a/packages/app/package.json b/packages/app/package.json
index 8bb13de78..95f095202 100644
--- a/packages/app/package.json
+++ b/packages/app/package.json
@@ -1,6 +1,6 @@
{
"name": "@opencode/app",
- "version": "0.9.7",
+ "version": "0.9.8",
"description": "",
"type": "module",
"scripts": {
diff --git a/packages/function/package.json b/packages/function/package.json
index 22b8ca38e..944b2edb3 100644
--- a/packages/function/package.json
+++ b/packages/function/package.json
@@ -1,6 +1,6 @@
{
"name": "@opencode/function",
- "version": "0.9.7",
+ "version": "0.9.8",
"$schema": "https://json.schemastore.org/package.json",
"private": true,
"type": "module",
diff --git a/packages/opencode/package.json b/packages/opencode/package.json
index 6b88eace0..a15c659fd 100644
--- a/packages/opencode/package.json
+++ b/packages/opencode/package.json
@@ -1,6 +1,6 @@
{
"$schema": "https://json.schemastore.org/package.json",
- "version": "0.9.7",
+ "version": "0.9.8",
"name": "opencode",
"type": "module",
"private": true,
diff --git a/packages/plugin/package.json b/packages/plugin/package.json
index 84ae0ce1f..38ab671f6 100644
--- a/packages/plugin/package.json
+++ b/packages/plugin/package.json
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package.json",
"name": "@opencode-ai/plugin",
- "version": "0.9.7",
+ "version": "0.9.8",
"type": "module",
"scripts": {
"typecheck": "tsc --noEmit"
diff --git a/packages/sdk/js/package.json b/packages/sdk/js/package.json
index 1e7273e06..4a6907c54 100644
--- a/packages/sdk/js/package.json
+++ b/packages/sdk/js/package.json
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package.json",
"name": "@opencode-ai/sdk",
- "version": "0.9.7",
+ "version": "0.9.8",
"type": "module",
"scripts": {
"typecheck": "tsc --noEmit"
diff --git a/packages/sdk/js/src/gen/client/client.gen.ts b/packages/sdk/js/src/gen/client/client.gen.ts
index aab8586ee..34a8d0bec 100644
--- a/packages/sdk/js/src/gen/client/client.gen.ts
+++ b/packages/sdk/js/src/gen/client/client.gen.ts
@@ -1,8 +1,6 @@
// This file is auto-generated by @hey-api/openapi-ts
import { createSseClient } from "../core/serverSentEvents.gen.js"
-import type { HttpMethod } from "../core/types.gen.js"
-import { getValidRequestBody } from "../core/utils.gen.js"
import type { Client, Config, RequestOptions, ResolvedRequestOptions } from "./types.gen.js"
import {
buildUrl,
@@ -51,12 +49,12 @@ export const createClient = (config: Config = {}): Client => {
await opts.requestValidator(opts)
}
- if (opts.body !== undefined && opts.bodySerializer) {
+ if (opts.body && opts.bodySerializer) {
opts.serializedBody = opts.bodySerializer(opts.body)
}
// remove Content-Type header if body is empty to avoid sending invalid requests
- if (opts.body === undefined || opts.serializedBody === "") {
+ if (opts.serializedBody === undefined || opts.serializedBody === "") {
opts.headers.delete("Content-Type")
}
@@ -71,7 +69,7 @@ export const createClient = (config: Config = {}): Client => {
const requestInit: ReqInit = {
redirect: "follow",
...opts,
- body: getValidRequestBody(opts),
+ body: opts.serializedBody,
}
let request = new Request(url, requestInit)
@@ -99,36 +97,18 @@ export const createClient = (config: Config = {}): Client => {
}
if (response.ok) {
- const parseAs =
- (opts.parseAs === "auto" ? getParseAs(response.headers.get("Content-Type")) : opts.parseAs) ?? "json"
-
if (response.status === 204 || response.headers.get("Content-Length") === "0") {
- let emptyData: any
- switch (parseAs) {
- case "arrayBuffer":
- case "blob":
- case "text":
- emptyData = await response[parseAs]()
- break
- case "formData":
- emptyData = new FormData()
- break
- case "stream":
- emptyData = response.body
- break
- case "json":
- default:
- emptyData = {}
- break
- }
return opts.responseStyle === "data"
- ? emptyData
+ ? {}
: {
- data: emptyData,
+ data: {},
...result,
}
}
+ const parseAs =
+ (opts.parseAs === "auto" ? getParseAs(response.headers.get("Content-Type")) : opts.parseAs) ?? "json"
+
let data: any
switch (parseAs) {
case "arrayBuffer":
@@ -198,53 +178,35 @@ export const createClient = (config: Config = {}): Client => {
}
}
- const makeMethodFn = (method: Uppercase<HttpMethod>) => (options: RequestOptions) => request({ ...options, method })
-
- const makeSseFn = (method: Uppercase<HttpMethod>) => async (options: RequestOptions) => {
- const { opts, url } = await beforeRequest(options)
- return createSseClient({
- ...opts,
- body: opts.body as BodyInit | null | undefined,
- headers: opts.headers as unknown as Record<string, string>,
- method,
- onRequest: async (url, init) => {
- let request = new Request(url, init)
- for (const fn of interceptors.request._fns) {
- if (fn) {
- request = await fn(request, opts)
- }
- }
- return request
- },
- url,
- })
+ const makeMethod = (method: Required<Config>["method"]) => {
+ const fn = (options: RequestOptions) => request({ ...options, method })
+ fn.sse = async (options: RequestOptions) => {
+ const { opts, url } = await beforeRequest(options)
+ return createSseClient({
+ ...opts,
+ body: opts.body as BodyInit | null | undefined,
+ headers: opts.headers as unknown as Record<string, string>,
+ method,
+ url,
+ })
+ }
+ return fn
}
return {
buildUrl,
- connect: makeMethodFn("CONNECT"),
- delete: makeMethodFn("DELETE"),
- get: makeMethodFn("GET"),
+ connect: makeMethod("CONNECT"),
+ delete: makeMethod("DELETE"),
+ get: makeMethod("GET"),
getConfig,
- head: makeMethodFn("HEAD"),
+ head: makeMethod("HEAD"),
interceptors,
- options: makeMethodFn("OPTIONS"),
- patch: makeMethodFn("PATCH"),
- post: makeMethodFn("POST"),
- put: makeMethodFn("PUT"),
+ options: makeMethod("OPTIONS"),
+ patch: makeMethod("PATCH"),
+ post: makeMethod("POST"),
+ put: makeMethod("PUT"),
request,
setConfig,
- sse: {
- connect: makeSseFn("CONNECT"),
- delete: makeSseFn("DELETE"),
- get: makeSseFn("GET"),
- head: makeSseFn("HEAD"),
- options: makeSseFn("OPTIONS"),
- patch: makeSseFn("PATCH"),
- post: makeSseFn("POST"),
- put: makeSseFn("PUT"),
- trace: makeSseFn("TRACE"),
- },
- trace: makeMethodFn("TRACE"),
+ trace: makeMethod("TRACE"),
} as Client
}
diff --git a/packages/sdk/js/src/gen/client/types.gen.ts b/packages/sdk/js/src/gen/client/types.gen.ts
index f16d2cd57..db8e544cf 100644
--- a/packages/sdk/js/src/gen/client/types.gen.ts
+++ b/packages/sdk/js/src/gen/client/types.gen.ts
@@ -20,7 +20,7 @@ export interface Config<T extends ClientOptions = ClientOptions>
*
* @default globalThis.fetch
*/
- fetch?: typeof fetch
+ fetch?: (request: Request) => ReturnType<typeof fetch>
/**
* Please don't use the Fetch client for Next.js applications. The `next`
* options won't have any effect.
@@ -128,7 +128,7 @@ export interface ClientOptions {
throwOnError?: boolean
}
-type MethodFn = <
+type MethodFnBase = <
TData = unknown,
TError = unknown,
ThrowOnError extends boolean = false,
@@ -137,7 +137,7 @@ type MethodFn = <
options: Omit<RequestOptions<TData, TResponseStyle, ThrowOnError>, "method">,
) => RequestResult<TData, TError, ThrowOnError, TResponseStyle>
-type SseFn = <
+type MethodFnServerSentEvents = <
TData = unknown,
TError = unknown,
ThrowOnError extends boolean = false,
@@ -146,6 +146,10 @@ type SseFn = <
options: Omit<RequestOptions<TData, TResponseStyle, ThrowOnError>, "method">,
) => Promise<ServerSentEventsResult<TData, TError>>
+type MethodFn = MethodFnBase & {
+ sse: MethodFnServerSentEvents
+}
+
type RequestFn = <
TData = unknown,
TError = unknown,
@@ -167,7 +171,7 @@ type BuildUrlFn = <
options: Pick<TData, "url"> & Options<TData>,
) => string
-export type Client = CoreClient<RequestFn, Config, MethodFn, BuildUrlFn, SseFn> & {
+export type Client = CoreClient<RequestFn, Config, MethodFn, BuildUrlFn> & {
interceptors: Middleware<Request, Response, unknown, ResolvedRequestOptions>
}
diff --git a/packages/sdk/js/src/gen/client/utils.gen.ts b/packages/sdk/js/src/gen/client/utils.gen.ts
index 71d52f776..209bfbe8e 100644
--- a/packages/sdk/js/src/gen/client/utils.gen.ts
+++ b/packages/sdk/js/src/gen/client/utils.gen.ts
@@ -162,22 +162,14 @@ export const mergeConfigs = (a: Config, b: Config): Config => {
return config
}
-const headersEntries = (headers: Headers): Array<[string, string]> => {
- const entries: Array<[string, string]> = []
- headers.forEach((value, key) => {
- entries.push([key, value])
- })
- return entries
-}
-
export const mergeHeaders = (...headers: Array<Required<Config>["headers"] | undefined>): Headers => {
const mergedHeaders = new Headers()
for (const header of headers) {
- if (!header) {
+ if (!header || typeof header !== "object") {
continue
}
- const iterator = header instanceof Headers ? headersEntries(header) : Object.entries(header)
+ const iterator = header instanceof Headers ? header.entries() : Object.entries(header)
for (const [key, value] of iterator) {
if (value === null) {
diff --git a/packages/sdk/js/src/gen/core/serverSentEvents.gen.ts b/packages/sdk/js/src/gen/core/serverSentEvents.gen.ts
index 09ef3fb39..8f7fac549 100644
--- a/packages/sdk/js/src/gen/core/serverSentEvents.gen.ts
+++ b/packages/sdk/js/src/gen/core/serverSentEvents.gen.ts
@@ -5,17 +5,6 @@ import type { Config } from "./types.gen.js"
export type ServerSentEventsOptions<TData = unknown> = Omit<RequestInit, "method"> &
Pick<Config, "method" | "responseTransformer" | "responseValidator"> & {
/**
- * Fetch API implementation. You can use this option to provide a custom
- * fetch instance.
- *
- * @default globalThis.fetch
- */
- fetch?: typeof fetch
- /**
- * Implementing clients can call request interceptors inside this hook.
- */
- onRequest?: (url: string, init: RequestInit) => Promise<Request>
- /**
* Callback invoked when a network or parsing error occurs during streaming.
*
* This option applies only if the endpoint returns a stream of events.
@@ -32,7 +21,6 @@ export type ServerSentEventsOptions<TData = unknown> = Omit<RequestInit, "method
* @returns Nothing (void).
*/
onSseEvent?: (event: StreamEvent<TData>) => void
- serializedBody?: RequestInit["body"]
/**
* Default retry delay in milliseconds.
*
@@ -76,7 +64,6 @@ export type ServerSentEventsResult<TData = unknown, TReturn = void, TNext = unkn
}
export const createSseClient = <TData = unknown>({
- onRequest,
onSseError,
onSseEvent,
responseTransformer,
@@ -112,21 +99,7 @@ export const createSseClient = <TData = unknown>({
}
try {
- const requestInit: RequestInit = {
- redirect: "follow",
- ...options,
- body: options.serializedBody,
- headers,
- signal,
- }
- let request = new Request(url, requestInit)
- if (onRequest) {
- request = await onRequest(url, requestInit)
- }
- // fetch must be assigned here, otherwise it would throw the error:
- // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation
- const _fetch = options.fetch ?? globalThis.fetch
- const response = await _fetch(request)
+ const response = await fetch(url, { ...options, headers, signal })
if (!response.ok) throw new Error(`SSE failed: ${response.status} ${response.statusText}`)
diff --git a/packages/sdk/js/src/gen/core/types.gen.ts b/packages/sdk/js/src/gen/core/types.gen.ts
index bfa77b8ac..16408b2d0 100644
--- a/packages/sdk/js/src/gen/core/types.gen.ts
+++ b/packages/sdk/js/src/gen/core/types.gen.ts
@@ -3,19 +3,24 @@
import type { Auth, AuthToken } from "./auth.gen.js"
import type { BodySerializer, QuerySerializer, QuerySerializerOptions } from "./bodySerializer.gen.js"
-export type HttpMethod = "connect" | "delete" | "get" | "head" | "options" | "patch" | "post" | "put" | "trace"
-
-export type Client<RequestFn = never, Config = unknown, MethodFn = never, BuildUrlFn = never, SseFn = never> = {
+export interface Client<RequestFn = never, Config = unknown, MethodFn = never, BuildUrlFn = never> {
/**
* Returns the final request URL.
*/
buildUrl: BuildUrlFn
+ connect: MethodFn
+ delete: MethodFn
+ get: MethodFn
getConfig: () => Config
+ head: MethodFn
+ options: MethodFn
+ patch: MethodFn
+ post: MethodFn
+ put: MethodFn
request: RequestFn
setConfig: (config: Config) => Config
-} & {
- [K in HttpMethod]: MethodFn
-} & ([SseFn] extends [never] ? { sse?: never } : { sse: { [K in HttpMethod]: SseFn } })
+ trace: MethodFn
+}
export interface Config {
/**
@@ -42,7 +47,7 @@ export interface Config {
*
* {@link https://developer.mozilla.org/docs/Web/API/fetch#method See more}
*/
- method?: Uppercase<HttpMethod>
+ method?: "CONNECT" | "DELETE" | "GET" | "HEAD" | "OPTIONS" | "PATCH" | "POST" | "PUT" | "TRACE"
/**
* A function for serializing request query parameters. By default, arrays
* will be exploded in form style, objects will be exploded in deepObject
diff --git a/packages/sdk/js/src/gen/core/utils.gen.ts b/packages/sdk/js/src/gen/core/utils.gen.ts
index 8a45f7269..be18c608a 100644
--- a/packages/sdk/js/src/gen/core/utils.gen.ts
+++ b/packages/sdk/js/src/gen/core/utils.gen.ts
@@ -1,6 +1,6 @@
// This file is auto-generated by @hey-api/openapi-ts
-import type { BodySerializer, QuerySerializer } from "./bodySerializer.gen.js"
+import type { QuerySerializer } from "./bodySerializer.gen.js"
import {
type ArraySeparatorStyle,
serializeArrayParam,
@@ -107,31 +107,3 @@ export const getUrl = ({
}
return url
}
-
-export function getValidRequestBody(options: {
- body?: unknown
- bodySerializer?: BodySerializer | null
- serializedBody?: unknown
-}) {
- const hasBody = options.body !== undefined
- const isSerializedBody = hasBody && options.bodySerializer
-
- if (isSerializedBody) {
- if ("serializedBody" in options) {
- const hasSerializedBody = options.serializedBody !== undefined && options.serializedBody !== ""
-
- return hasSerializedBody ? options.serializedBody : null
- }
-
- // not all clients implement a serializedBody property (i.e. client-axios)
- return options.body !== "" ? options.body : null
- }
-
- // plain/text body
- if (hasBody) {
- return options.body
- }
-
- // no body was provided
- return undefined
-}
diff --git a/packages/sdk/js/src/gen/sdk.gen.ts b/packages/sdk/js/src/gen/sdk.gen.ts
index f179afc12..9d5ee2e80 100644
--- a/packages/sdk/js/src/gen/sdk.gen.ts
+++ b/packages/sdk/js/src/gen/sdk.gen.ts
@@ -664,7 +664,7 @@ class Event extends _HeyApiClient {
* Get events
*/
public subscribe<ThrowOnError extends boolean = false>(options?: Options<EventSubscribeData, ThrowOnError>) {
- return (options?.client ?? this._client).sse.get<EventSubscribeResponses, unknown, ThrowOnError>({
+ return (options?.client ?? this._client).get.sse<EventSubscribeResponses, unknown, ThrowOnError>({
url: "/event",
...options,
})
diff --git a/packages/web/package.json b/packages/web/package.json
index 889497503..411aa5faf 100644
--- a/packages/web/package.json
+++ b/packages/web/package.json
@@ -1,7 +1,7 @@
{
"name": "@opencode/web",
"type": "module",
- "version": "0.9.7",
+ "version": "0.9.8",
"scripts": {
"dev": "astro dev",
"dev:remote": "VITE_API_URL=https://api.opencode.ai astro dev",