From f3c2d1b6c23f50aae9e60a61f283ac9eaf5bccb6 Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Sun, 5 Oct 2025 07:00:29 -0400 Subject: [PATCH 1/5] sdk: simplify getting started with single createOpencode function Makes it easier for developers to get started by providing a single function that creates both server and client, removing the need to manually coordinate separate server and client creation --- packages/sdk/js/src/index.ts | 18 ++++++++++ packages/web/src/content/docs/sdk.mdx | 50 ++++++++++++--------------- script/publish.ts | 13 ++++--- 3 files changed, 47 insertions(+), 34 deletions(-) diff --git a/packages/sdk/js/src/index.ts b/packages/sdk/js/src/index.ts index 03cf66634..3df2b29d6 100644 --- a/packages/sdk/js/src/index.ts +++ b/packages/sdk/js/src/index.ts @@ -1,2 +1,20 @@ export * from "./client.js" export * from "./server.js" + +import { createOpencodeClient } from "./client.js" +import { createOpencodeServer, ServerOptions } from "./server.js" + +export async function createOpencode(options?: ServerOptions) { + const server = await createOpencodeServer({ + ...options, + }) + + const client = createOpencodeClient({ + baseUrl: server.url, + }) + + return { + client, + server, + } +} diff --git a/packages/web/src/content/docs/sdk.mdx b/packages/web/src/content/docs/sdk.mdx index 1e65064f4..2b90bd9bc 100644 --- a/packages/web/src/content/docs/sdk.mdx +++ b/packages/web/src/content/docs/sdk.mdx @@ -25,17 +25,16 @@ npm install @opencode-ai/sdk ## Create client -Create a client instance to connect to your server: +Create an instance of opencode: ```javascript -import { createOpencodeClient } from "@opencode-ai/sdk" +import { createOpencode } from "@opencode-ai/sdk" -const client = createOpencodeClient({ - baseUrl: "http://localhost:4096", - responseStyle: "data", -}) +const { client } = await createOpencode() ``` +This starts both a server and a client + #### Options | Option | Type | Description | Default | @@ -48,29 +47,14 @@ const client = createOpencodeClient({ --- -## Start server +## Config -You can also programmatically start an opencode server: +You can pass a configuration object to customize behavior. The instance still picks up your `opencode.json`, but you can override or add configuration inline: ```javascript -import { createOpencodeServer } from "@opencode-ai/sdk" +import { createOpencode } from "@opencode-ai/sdk" -const server = await createOpencodeServer({ - hostname: "127.0.0.1", - port: 4096, -}) - -console.log(`Server running at ${server.url}`) - -server.close() -``` - -You can pass a configuration object to customize server behavior. The server still picks up your `opencode.json`, but you can override or add configuration inline: - -```javascript -import { createOpencodeServer } from "@opencode-ai/sdk" - -const server = await createOpencodeServer({ +const opencode = await createOpencode({ hostname: "127.0.0.1", port: 4096, config: { @@ -78,9 +62,21 @@ const server = await createOpencodeServer({ }, }) -console.log(`Server running at ${server.url}`) +console.log(`Server running at ${opencode.server.url}`) -server.close() +opencode.server.close() +``` + +## Client only + +If you aready have a running instance of opencode, you can create a client instance to connect to it: + +```javascript +import { createOpencodeClient } from "@opencode-ai/sdk" + +const client = createOpencodeClient({ + baseUrl: "http://localhost:4096", +}) ``` #### Options diff --git a/script/publish.ts b/script/publish.ts index 142981171..6d162d66f 100755 --- a/script/publish.ts +++ b/script/publish.ts @@ -1,12 +1,12 @@ #!/usr/bin/env bun import { $ } from "bun" -import { createOpencodeClient, createOpencodeServer } from "@opencode-ai/sdk" +import { createOpencode } from "@opencode-ai/sdk" if (process.versions.bun !== "1.2.21") { throw new Error("This script requires bun@1.2.21") } -let notes = [] +const notes = [] as string[] console.log("=== publishing ===\n") @@ -35,11 +35,10 @@ if (!snapshot) { }) .then((data) => data.tag_name) - const server = await createOpencodeServer() - const client = createOpencodeClient({ baseUrl: server.url }) - const session = await client.session.create() + const opencode = await createOpencode() + const session = await opencode.client.session.create() console.log("generating changelog since " + previous) - const raw = await client.session + const raw = await opencode.client.session .prompt({ path: { id: session.data!.id, @@ -85,7 +84,7 @@ if (!snapshot) { } } console.log(notes) - server.close() + opencode.server.close() } const pkgjsons = await Array.fromAsync( From 116a006ce6145c2467fea54862831b15fa30b14d Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Sun, 5 Oct 2025 07:00:29 -0400 Subject: [PATCH 2/5] sdk: simplify getting started with single createOpencode function Makes it easier for developers to get started by providing a single function that creates both server and client, removing the need to manually coordinate separate server and client creation --- packages/sdk/js/src/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/sdk/js/src/index.ts b/packages/sdk/js/src/index.ts index 3df2b29d6..d044f5ad6 100644 --- a/packages/sdk/js/src/index.ts +++ b/packages/sdk/js/src/index.ts @@ -2,7 +2,8 @@ export * from "./client.js" export * from "./server.js" import { createOpencodeClient } from "./client.js" -import { createOpencodeServer, ServerOptions } from "./server.js" +import { createOpencodeServer } from "./server.js" +import type { ServerOptions } from "./server.js" export async function createOpencode(options?: ServerOptions) { const server = await createOpencodeServer({ From 1bb664869c9abbd9537f0f1a76f07b728a42b25f Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Sun, 5 Oct 2025 07:11:43 -0400 Subject: [PATCH 3/5] ci: disable aur --- packages/opencode/script/publish.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/opencode/script/publish.ts b/packages/opencode/script/publish.ts index 996ec46e7..3e9642b06 100755 --- a/packages/opencode/script/publish.ts +++ b/packages/opencode/script/publish.ts @@ -61,6 +61,8 @@ if (!snapshot) { const macX64Sha = await $`sha256sum ./dist/opencode-darwin-x64.zip | cut -d' ' -f1`.text().then((x) => x.trim()) const macArm64Sha = await $`sha256sum ./dist/opencode-darwin-arm64.zip | cut -d' ' -f1`.text().then((x) => x.trim()) + // arch + /* const binaryPkgbuild = [ "# Maintainer: dax", "# Maintainer: adam", @@ -146,6 +148,7 @@ if (!snapshot) { await $`cd ./dist/aur-${pkg} && git commit -m "Update to v${version}"` await $`cd ./dist/aur-${pkg} && git push` } + */ // Homebrew formula const homebrewFormula = [ From aced8c95f2c96bac0fa85db40fdccdf0f153dac2 Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Sun, 5 Oct 2025 07:14:52 -0400 Subject: [PATCH 4/5] ci: publish --- script/publish.ts | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/script/publish.ts b/script/publish.ts index 6d162d66f..a4f2ba663 100755 --- a/script/publish.ts +++ b/script/publish.ts @@ -14,11 +14,13 @@ const snapshot = process.env["OPENCODE_SNAPSHOT"] === "true" const version = await (async () => { if (snapshot) return `0.0.0-${new Date().toISOString().slice(0, 16).replace(/[-:T]/g, "")}` if (process.env["OPENCODE_VERSION"]) return process.env["OPENCODE_VERSION"] - const [major, minor, patch] = (await $`gh release list --limit 1 --json tagName --jq '.[0].tagName'`.text()) - .trim() - .replace(/^v/, "") - .split(".") - .map((x) => Number(x) || 0) + const npmVersion = await fetch("https://registry.npmjs.org/opencode-ai/latest") + .then((res) => { + if (!res.ok) throw new Error(res.statusText) + return res.json() + }) + .then((data: any) => data.version) + const [major, minor, patch] = npmVersion.split(".").map((x: string) => Number(x) || 0) const t = process.env["OPENCODE_BUMP"]?.toLowerCase() if (t === "major") return `${major + 1}.0.0` if (t === "minor") return `${major}.${minor + 1}.0` @@ -28,12 +30,12 @@ process.env["OPENCODE_VERSION"] = version console.log("version:", version) if (!snapshot) { - const previous = await fetch("https://api.github.com/repos/sst/opencode/releases/latest") + const previous = await fetch("https://registry.npmjs.org/opencode-ai/latest") .then((res) => { if (!res.ok) throw new Error(res.statusText) return res.json() }) - .then((data) => data.tag_name) + .then((data: any) => data.version) const opencode = await createOpencode() const session = await opencode.client.session.create() From d2a4a0375f6ee2bc05b89e52025871997628a339 Mon Sep 17 00:00:00 2001 From: opencode Date: Sun, 5 Oct 2025 11:22:57 +0000 Subject: [PATCH 5/5] release: v0.14.3 --- bun.lock | 20 ++++++++++---------- packages/console/app/package.json | 2 +- packages/console/core/package.json | 2 +- packages/console/function/package.json | 2 +- packages/console/mail/package.json | 2 +- packages/console/scripts/package.json | 2 +- packages/desktop/package.json | 2 +- packages/function/package.json | 2 +- packages/opencode/package.json | 2 +- packages/plugin/package.json | 2 +- packages/sdk/js/package.json | 2 +- packages/web/package.json | 2 +- sdks/vscode/package.json | 2 +- 13 files changed, 22 insertions(+), 22 deletions(-) diff --git a/bun.lock b/bun.lock index f65c48339..159e57360 100644 --- a/bun.lock +++ b/bun.lock @@ -27,7 +27,7 @@ }, "packages/console/core": { "name": "@opencode-ai/console-core", - "version": "0.14.1", + "version": "0.14.3", "dependencies": { "@aws-sdk/client-sts": "3.782.0", "@jsx-email/render": "1.1.1", @@ -47,7 +47,7 @@ }, "packages/console/function": { "name": "@opencode-ai/console-function", - "version": "0.14.1", + "version": "0.14.3", "dependencies": { "@ai-sdk/anthropic": "2.0.0", "@ai-sdk/openai": "2.0.2", @@ -67,7 +67,7 @@ }, "packages/console/mail": { "name": "@opencode-ai/console-mail", - "version": "0.14.1", + "version": "0.14.3", "dependencies": { "@jsx-email/all": "2.2.3", "@jsx-email/cli": "1.4.3", @@ -83,7 +83,7 @@ }, "packages/console/scripts": { "name": "@opencode-ai/console-scripts", - "version": "0.14.1", + "version": "0.14.3", "dependencies": { "@opencode-ai/console-core": "workspace:*", "tsx": "4.20.5", @@ -95,7 +95,7 @@ }, "packages/desktop": { "name": "@opencode-ai/desktop", - "version": "0.14.1", + "version": "0.14.3", "dependencies": { "@kobalte/core": "catalog:", "@opencode-ai/sdk": "workspace:*", @@ -129,7 +129,7 @@ }, "packages/function": { "name": "@opencode-ai/function", - "version": "0.14.1", + "version": "0.14.3", "dependencies": { "@octokit/auth-app": "8.0.1", "@octokit/rest": "22.0.0", @@ -144,7 +144,7 @@ }, "packages/opencode": { "name": "opencode", - "version": "0.14.1", + "version": "0.14.3", "bin": { "opencode": "./bin/opencode", }, @@ -197,7 +197,7 @@ }, "packages/plugin": { "name": "@opencode-ai/plugin", - "version": "0.14.1", + "version": "0.14.3", "dependencies": { "@opencode-ai/sdk": "workspace:*", "zod": "catalog:", @@ -209,7 +209,7 @@ }, "packages/sdk/js": { "name": "@opencode-ai/sdk", - "version": "0.14.1", + "version": "0.14.3", "dependencies": { "@hey-api/openapi-ts": "0.81.0", }, @@ -221,7 +221,7 @@ }, "packages/web": { "name": "@opencode-ai/web", - "version": "0.14.1", + "version": "0.14.3", "dependencies": { "@astrojs/cloudflare": "12.6.3", "@astrojs/markdown-remark": "6.3.1", diff --git a/packages/console/app/package.json b/packages/console/app/package.json index 1973e654f..cfa272706 100644 --- a/packages/console/app/package.json +++ b/packages/console/app/package.json @@ -7,7 +7,7 @@ "dev:remote": "VITE_AUTH_URL=https://auth.dev.opencode.ai bun sst shell --stage=dev bun dev", "build": "vinxi build && ../../opencode/script/schema.ts ./.output/public/config.json", "start": "vinxi start", - "version": "0.14.1" + "version": "0.14.3" }, "dependencies": { "@ibm/plex": "6.4.1", diff --git a/packages/console/core/package.json b/packages/console/core/package.json index c73f6adb9..72f15529f 100644 --- a/packages/console/core/package.json +++ b/packages/console/core/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/console-core", - "version": "0.14.1", + "version": "0.14.3", "private": true, "type": "module", "dependencies": { diff --git a/packages/console/function/package.json b/packages/console/function/package.json index fc92e6a13..490763b01 100644 --- a/packages/console/function/package.json +++ b/packages/console/function/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-function", - "version": "0.14.1", + "version": "0.14.3", "$schema": "https://json.schemastore.org/package.json", "private": true, "type": "module", diff --git a/packages/console/mail/package.json b/packages/console/mail/package.json index 66d422bf0..51106f908 100644 --- a/packages/console/mail/package.json +++ b/packages/console/mail/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/console-mail", - "version": "0.14.1", + "version": "0.14.3", "private": true, "type": "module", "dependencies": { diff --git a/packages/console/scripts/package.json b/packages/console/scripts/package.json index ed4d7f543..24af8a674 100644 --- a/packages/console/scripts/package.json +++ b/packages/console/scripts/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-scripts", - "version": "0.14.1", + "version": "0.14.3", "$schema": "https://json.schemastore.org/package.json", "private": true, "type": "module", diff --git a/packages/desktop/package.json b/packages/desktop/package.json index 85517c4f8..4e1279fd5 100644 --- a/packages/desktop/package.json +++ b/packages/desktop/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/desktop", - "version": "0.14.1", + "version": "0.14.3", "description": "", "type": "module", "scripts": { diff --git a/packages/function/package.json b/packages/function/package.json index 7898107ca..26589a290 100644 --- a/packages/function/package.json +++ b/packages/function/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/function", - "version": "0.14.1", + "version": "0.14.3", "$schema": "https://json.schemastore.org/package.json", "private": true, "type": "module", diff --git a/packages/opencode/package.json b/packages/opencode/package.json index 47a52b24b..179436346 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "0.14.1", + "version": "0.14.3", "name": "opencode", "type": "module", "private": true, diff --git a/packages/plugin/package.json b/packages/plugin/package.json index a69e74854..a8020354f 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.14.1", + "version": "0.14.3", "type": "module", "scripts": { "typecheck": "tsc --noEmit", diff --git a/packages/sdk/js/package.json b/packages/sdk/js/package.json index 1271b2ee3..2e13ace51 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.14.1", + "version": "0.14.3", "type": "module", "scripts": { "typecheck": "tsc --noEmit", diff --git a/packages/web/package.json b/packages/web/package.json index c044d71a0..0b74294c1 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -1,7 +1,7 @@ { "name": "@opencode-ai/web", "type": "module", - "version": "0.14.1", + "version": "0.14.3", "scripts": { "dev": "astro dev", "dev:remote": "VITE_API_URL=https://api.opencode.ai astro dev", diff --git a/sdks/vscode/package.json b/sdks/vscode/package.json index 4e01421ad..fbafdf783 100644 --- a/sdks/vscode/package.json +++ b/sdks/vscode/package.json @@ -2,7 +2,7 @@ "name": "opencode", "displayName": "opencode", "description": "opencode for VS Code", - "version": "0.14.1", + "version": "0.14.3", "publisher": "sst-dev", "repository": { "type": "git",