From 7265cdf817196e60c85cf172e66147145d8dd43b Mon Sep 17 00:00:00 2001 From: Aiden Cline Date: Wed, 29 Oct 2025 10:19:02 -0500 Subject: [PATCH 1/9] ignore: rm --- packages/opencode/src/session/prompt.ts | 68 ++++++++++++++++--------- 1 file changed, 45 insertions(+), 23 deletions(-) diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index 144d61d1..f403ef22 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -286,7 +286,11 @@ export namespace SessionPrompt { OUTPUT_TOKEN_MAX, ), abortSignal: abort.signal, - providerOptions: ProviderTransform.providerOptions(model.npm, model.providerID, params.options), + providerOptions: ProviderTransform.providerOptions( + model.npm, + model.providerID, + params.options, + ), stopWhen: stepCountIs(1), temperature: params.temperature, topP: params.topP, @@ -321,7 +325,11 @@ export namespace SessionPrompt { async transformParams(args) { if (args.type === "stream") { // @ts-expect-error - args.params.prompt = ProviderTransform.message(args.params.prompt, model.providerID, model.modelID) + args.params.prompt = ProviderTransform.message( + args.params.prompt, + model.providerID, + model.modelID, + ) } return args.params }, @@ -504,7 +512,11 @@ export namespace SessionPrompt { ) for (const item of await ToolRegistry.tools(input.providerID, input.modelID)) { if (Wildcard.all(item.id, enabledTools) === false) continue - const schema = ProviderTransform.schema(input.providerID, input.modelID, z.toJSONSchema(item.parameters)) + const schema = ProviderTransform.schema( + input.providerID, + input.modelID, + z.toJSONSchema(item.parameters), + ) tools[item.id] = tool({ id: item.id as any, description: item.description, @@ -585,17 +597,7 @@ export namespace SessionPrompt { args, }, ) - const result = await execute(args, opts).catch((err: unknown) => { - log.error("Error executing tool", { error: err, tool: key }) - return { - content: [ - { - type: "text", - text: `Failed to execute tool: ${err instanceof Error ? err.message : String(err)}`, - }, - ], - } - }) + const result = await execute(args, opts) await Plugin.trigger( "tool.execute.after", @@ -809,7 +811,9 @@ export namespace SessionPrompt { messageID: info.id, sessionID: input.sessionID, type: "file", - url: `data:${part.mime};base64,` + Buffer.from(await file.bytes()).toString("base64"), + url: + `data:${part.mime};base64,` + + Buffer.from(await file.bytes()).toString("base64"), mime: part.mime, filename: part.filename!, source: part.source, @@ -883,7 +887,9 @@ export namespace SessionPrompt { synthetic: true, }) } - const wasPlan = input.messages.some((msg) => msg.info.role === "assistant" && msg.info.mode === "plan") + const wasPlan = input.messages.some( + (msg) => msg.info.role === "assistant" && msg.info.mode === "plan", + ) if (wasPlan && input.agent.name === "build") { userMessage.parts.push({ id: Identifier.ascending("part"), @@ -963,7 +969,10 @@ export namespace SessionPrompt { partFromToolCall(toolCallID: string) { return toolcalls[toolCallID] }, - async process(stream: StreamTextResult, never>, retries: { count: number; max: number }) { + async process( + stream: StreamTextResult, never>, + retries: { count: number; max: number }, + ) { log.info("process") if (!assistantMsg) throw new Error("call next() first before processing") let shouldRetry = false @@ -1094,7 +1103,10 @@ export namespace SessionPrompt { status: "error", input: value.input, error: (value.error as any).toString(), - metadata: value.error instanceof Permission.RejectedError ? value.error.metadata : undefined, + metadata: + value.error instanceof Permission.RejectedError + ? value.error.metadata + : undefined, time: { start: match.state.time.start, end: Date.now(), @@ -1218,7 +1230,11 @@ export namespace SessionPrompt { error: e, }) const error = MessageV2.fromError(e, { providerID: input.providerID }) - if (retries.count < retries.max && MessageV2.APIError.isInstance(error) && error.data.isRetryable) { + if ( + retries.count < retries.max && + MessageV2.APIError.isInstance(error) && + error.data.isRetryable + ) { shouldRetry = true await Session.updatePart({ id: Identifier.ascending("part"), @@ -1241,7 +1257,11 @@ export namespace SessionPrompt { } const p = await Session.getParts(assistantMsg.id) for (const part of p) { - if (part.type === "tool" && part.state.status !== "completed" && part.state.status !== "error") { + if ( + part.type === "tool" && + part.state.status !== "completed" && + part.state.status !== "error" + ) { Session.updatePart({ ...part, state: { @@ -1705,11 +1725,13 @@ export namespace SessionPrompt { if (input.session.parentID) return if (!Session.isDefaultTitle(input.session.title)) return const isFirst = - input.history.filter((m) => m.info.role === "user" && !m.parts.every((p) => "synthetic" in p && p.synthetic)) - .length === 1 + input.history.filter( + (m) => m.info.role === "user" && !m.parts.every((p) => "synthetic" in p && p.synthetic), + ).length === 1 if (!isFirst) return const small = - (await Provider.getSmallModel(input.providerID)) ?? (await Provider.getModel(input.providerID, input.modelID)) + (await Provider.getSmallModel(input.providerID)) ?? + (await Provider.getModel(input.providerID, input.modelID)) const options = { ...ProviderTransform.options(small.providerID, small.modelID, input.session.id), ...small.info.options, From ca463a2346f520859921bb4495ade9a6d9798e62 Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Wed, 29 Oct 2025 11:26:03 -0400 Subject: [PATCH 2/9] session diff only include modified files --- packages/opencode/src/session/summary.ts | 29 +++++++++++++++++++----- 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/packages/opencode/src/session/summary.ts b/packages/opencode/src/session/summary.ts index 2a31f39e..1b932ff0 100644 --- a/packages/opencode/src/session/summary.ts +++ b/packages/opencode/src/session/summary.ts @@ -29,7 +29,16 @@ export namespace SessionSummary { ) async function summarizeSession(input: { sessionID: string; messages: MessageV2.WithParts[] }) { - const diffs = await computeDiff({ messages: input.messages }) + const files = new Set( + input.messages + .flatMap((x) => x.parts) + .filter((x) => x.type === "patch") + .flatMap((x) => x.files), + ) + console.log(files) + const diffs = await computeDiff({ messages: input.messages }).then((x) => + x.filter((x) => files.has(x.file)), + ) await Session.update(input.sessionID, (draft) => { draft.summary = { diffs, @@ -39,7 +48,9 @@ export namespace SessionSummary { async function summarizeMessage(input: { messageID: string; messages: MessageV2.WithParts[] }) { const messages = input.messages.filter( - (m) => m.info.id === input.messageID || (m.info.role === "assistant" && m.info.parentID === input.messageID), + (m) => + m.info.id === input.messageID || + (m.info.role === "assistant" && m.info.parentID === input.messageID), ) const msgWithParts = messages.find((m) => m.info.id === input.messageID)! const userMsg = msgWithParts.info as MessageV2.User @@ -50,11 +61,14 @@ export namespace SessionSummary { } await Session.updateMessage(userMsg) - const assistantMsg = messages.find((m) => m.info.role === "assistant")!.info as MessageV2.Assistant + const assistantMsg = messages.find((m) => m.info.role === "assistant")! + .info as MessageV2.Assistant const small = await Provider.getSmallModel(assistantMsg.providerID) if (!small) return - const textPart = msgWithParts.parts.find((p) => p.type === "text" && !p.synthetic) as MessageV2.TextPart + const textPart = msgWithParts.parts.find( + (p) => p.type === "text" && !p.synthetic, + ) as MessageV2.TextPart if (textPart && !userMsg.summary?.title) { const result = await generateText({ maxOutputTokens: small.info.reasoning ? 1500 : 20, @@ -81,7 +95,8 @@ export namespace SessionSummary { if ( messages.some( (m) => - m.info.role === "assistant" && m.parts.some((p) => p.type === "step-finish" && p.reason !== "tool-calls"), + m.info.role === "assistant" && + m.parts.some((p) => p.type === "step-finish" && p.reason !== "tool-calls"), ) ) { const result = await generateText({ @@ -114,7 +129,9 @@ export namespace SessionSummary { let all = await Session.messages(input.sessionID) if (input.messageID) all = all.filter( - (x) => x.info.id === input.messageID || (x.info.role === "assistant" && x.info.parentID === input.messageID), + (x) => + x.info.id === input.messageID || + (x.info.role === "assistant" && x.info.parentID === input.messageID), ) return computeDiff({ From 12782fff141c9a7cf240b2f26885ddb0cdaba36f Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Wed, 29 Oct 2025 11:27:51 -0400 Subject: [PATCH 3/9] remove log --- packages/opencode/src/session/summary.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/opencode/src/session/summary.ts b/packages/opencode/src/session/summary.ts index 1b932ff0..744465dc 100644 --- a/packages/opencode/src/session/summary.ts +++ b/packages/opencode/src/session/summary.ts @@ -35,7 +35,6 @@ export namespace SessionSummary { .filter((x) => x.type === "patch") .flatMap((x) => x.files), ) - console.log(files) const diffs = await computeDiff({ messages: input.messages }).then((x) => x.filter((x) => files.has(x.file)), ) From c652b2b4e803bb077835794355eea51c6663c0a3 Mon Sep 17 00:00:00 2001 From: opencode Date: Wed, 29 Oct 2025 15:38:55 +0000 Subject: [PATCH 4/9] release: v0.15.24 --- bun.lock | 22 +++++++------- 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/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/sdk/js/src/gen/sdk.gen.ts | 39 +++++++++++++++++++++++++ packages/sdk/js/src/gen/types.gen.ts | 40 ++++++++++++++++++++++++++ packages/slack/package.json | 2 +- packages/ui/package.json | 2 +- packages/web/package.json | 2 +- sdks/vscode/package.json | 2 +- 16 files changed, 103 insertions(+), 24 deletions(-) diff --git a/bun.lock b/bun.lock index 79bdbde5..bc1be2ab 100644 --- a/bun.lock +++ b/bun.lock @@ -37,7 +37,7 @@ }, "packages/console/core": { "name": "@opencode-ai/console-core", - "version": "0.15.23", + "version": "0.15.24", "dependencies": { "@aws-sdk/client-sts": "3.782.0", "@jsx-email/render": "1.1.1", @@ -64,7 +64,7 @@ }, "packages/console/function": { "name": "@opencode-ai/console-function", - "version": "0.15.23", + "version": "0.15.24", "dependencies": { "@ai-sdk/anthropic": "2.0.0", "@ai-sdk/openai": "2.0.2", @@ -88,7 +88,7 @@ }, "packages/console/mail": { "name": "@opencode-ai/console-mail", - "version": "0.15.23", + "version": "0.15.24", "dependencies": { "@jsx-email/all": "2.2.3", "@jsx-email/cli": "1.4.3", @@ -109,7 +109,7 @@ }, "packages/desktop": { "name": "@opencode-ai/desktop", - "version": "0.15.23", + "version": "0.15.24", "dependencies": { "@kobalte/core": "catalog:", "@opencode-ai/sdk": "workspace:*", @@ -150,7 +150,7 @@ }, "packages/function": { "name": "@opencode-ai/function", - "version": "0.15.23", + "version": "0.15.24", "dependencies": { "@octokit/auth-app": "8.0.1", "@octokit/rest": "22.0.0", @@ -166,7 +166,7 @@ }, "packages/opencode": { "name": "opencode", - "version": "0.15.23", + "version": "0.15.24", "bin": { "opencode": "./bin/opencode", }, @@ -230,7 +230,7 @@ }, "packages/plugin": { "name": "@opencode-ai/plugin", - "version": "0.15.23", + "version": "0.15.24", "dependencies": { "@opencode-ai/sdk": "workspace:*", "zod": "catalog:", @@ -250,7 +250,7 @@ }, "packages/sdk/js": { "name": "@opencode-ai/sdk", - "version": "0.15.23", + "version": "0.15.24", "devDependencies": { "@hey-api/openapi-ts": "0.81.0", "@tsconfig/node22": "catalog:", @@ -261,7 +261,7 @@ }, "packages/slack": { "name": "@opencode-ai/slack", - "version": "0.15.23", + "version": "0.15.24", "dependencies": { "@opencode-ai/sdk": "workspace:*", "@slack/bolt": "^3.17.1", @@ -274,7 +274,7 @@ }, "packages/ui": { "name": "@opencode-ai/ui", - "version": "0.15.23", + "version": "0.15.24", "dependencies": { "@kobalte/core": "catalog:", "@pierre/precision-diffs": "catalog:", @@ -297,7 +297,7 @@ }, "packages/web": { "name": "@opencode-ai/web", - "version": "0.15.23", + "version": "0.15.24", "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 d9d0d5ca..0fff7028 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.15.23" + "version": "0.15.24" }, "dependencies": { "@ibm/plex": "6.4.1", diff --git a/packages/console/core/package.json b/packages/console/core/package.json index 1361600b..29aad16b 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.15.23", + "version": "0.15.24", "private": true, "type": "module", "dependencies": { diff --git a/packages/console/function/package.json b/packages/console/function/package.json index 6229a530..fec9b5d0 100644 --- a/packages/console/function/package.json +++ b/packages/console/function/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-function", - "version": "0.15.23", + "version": "0.15.24", "$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 bd54e913..7598cb2b 100644 --- a/packages/console/mail/package.json +++ b/packages/console/mail/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-mail", - "version": "0.15.23", + "version": "0.15.24", "dependencies": { "@jsx-email/all": "2.2.3", "@jsx-email/cli": "1.4.3", diff --git a/packages/desktop/package.json b/packages/desktop/package.json index 8e5b0167..3a54ec26 100644 --- a/packages/desktop/package.json +++ b/packages/desktop/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/desktop", - "version": "0.15.23", + "version": "0.15.24", "description": "", "type": "module", "scripts": { diff --git a/packages/function/package.json b/packages/function/package.json index 837f093b..d5b39056 100644 --- a/packages/function/package.json +++ b/packages/function/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/function", - "version": "0.15.23", + "version": "0.15.24", "$schema": "https://json.schemastore.org/package.json", "private": true, "type": "module", diff --git a/packages/opencode/package.json b/packages/opencode/package.json index ce7934b1..90e1f6ab 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "0.15.23", + "version": "0.15.24", "name": "opencode", "type": "module", "private": true, diff --git a/packages/plugin/package.json b/packages/plugin/package.json index 037cdb64..73317d55 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.15.23", + "version": "0.15.24", "type": "module", "scripts": { "typecheck": "tsgo --noEmit", diff --git a/packages/sdk/js/package.json b/packages/sdk/js/package.json index 46ceefd0..416a0cb9 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.15.23", + "version": "0.15.24", "type": "module", "scripts": { "typecheck": "tsgo --noEmit", diff --git a/packages/sdk/js/src/gen/sdk.gen.ts b/packages/sdk/js/src/gen/sdk.gen.ts index 42e575dc..5eb12b0f 100644 --- a/packages/sdk/js/src/gen/sdk.gen.ts +++ b/packages/sdk/js/src/gen/sdk.gen.ts @@ -125,6 +125,10 @@ import type { TuiExecuteCommandErrors, TuiShowToastData, TuiShowToastResponses, + TuiControlNextData, + TuiControlNextResponses, + TuiControlResponseData, + TuiControlResponseResponses, AuthSetData, AuthSetResponses, AuthSetErrors, @@ -750,6 +754,40 @@ class Mcp extends _HeyApiClient { } } +class Control extends _HeyApiClient { + /** + * Get the next TUI request from the queue + */ + public next( + options?: Options, + ) { + return (options?.client ?? this._client).get({ + url: "/tui/control/next", + ...options, + }) + } + + /** + * Submit a response to the TUI request queue + */ + public response( + options?: Options, + ) { + return (options?.client ?? this._client).post< + TuiControlResponseResponses, + unknown, + ThrowOnError + >({ + url: "/tui/control/response", + ...options, + headers: { + "Content-Type": "application/json", + ...options?.headers, + }, + }) + } +} + class Tui extends _HeyApiClient { /** * Append prompt to the TUI @@ -878,6 +916,7 @@ class Tui extends _HeyApiClient { }, }) } + control = new Control({ client: this._client }) } class Auth extends _HeyApiClient { diff --git a/packages/sdk/js/src/gen/types.gen.ts b/packages/sdk/js/src/gen/types.gen.ts index 0b8948c5..14343f5a 100644 --- a/packages/sdk/js/src/gen/types.gen.ts +++ b/packages/sdk/js/src/gen/types.gen.ts @@ -2632,6 +2632,46 @@ export type TuiShowToastResponses = { export type TuiShowToastResponse = TuiShowToastResponses[keyof TuiShowToastResponses] +export type TuiControlNextData = { + body?: never + path?: never + query?: { + directory?: string + } + url: "/tui/control/next" +} + +export type TuiControlNextResponses = { + /** + * Next TUI request + */ + 200: { + path: string + body: unknown + } +} + +export type TuiControlNextResponse = TuiControlNextResponses[keyof TuiControlNextResponses] + +export type TuiControlResponseData = { + body?: unknown + path?: never + query?: { + directory?: string + } + url: "/tui/control/response" +} + +export type TuiControlResponseResponses = { + /** + * Response submitted successfully + */ + 200: boolean +} + +export type TuiControlResponseResponse = + TuiControlResponseResponses[keyof TuiControlResponseResponses] + export type AuthSetData = { body?: Auth path: { diff --git a/packages/slack/package.json b/packages/slack/package.json index 933136c0..3e9e857f 100644 --- a/packages/slack/package.json +++ b/packages/slack/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/slack", - "version": "0.15.23", + "version": "0.15.24", "type": "module", "scripts": { "dev": "bun run src/index.ts", diff --git a/packages/ui/package.json b/packages/ui/package.json index 888bfc36..16608105 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/ui", - "version": "0.15.23", + "version": "0.15.24", "type": "module", "exports": { ".": "./src/components/index.ts", diff --git a/packages/web/package.json b/packages/web/package.json index 80c88ebf..a7242a1f 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -1,7 +1,7 @@ { "name": "@opencode-ai/web", "type": "module", - "version": "0.15.23", + "version": "0.15.24", "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 c3b80117..bcb98bf6 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.15.23", + "version": "0.15.24", "publisher": "sst-dev", "repository": { "type": "git", From 244945c0e7ae515b965a575bd373ad81f9506c71 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 29 Oct 2025 10:43:27 -0500 Subject: [PATCH 5/9] fix: desktop error --- packages/desktop/src/components/prompt-input.tsx | 8 +++++--- packages/desktop/src/context/local.tsx | 1 - 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/desktop/src/components/prompt-input.tsx b/packages/desktop/src/components/prompt-input.tsx index e6701bdd..d6276c15 100644 --- a/packages/desktop/src/components/prompt-input.tsx +++ b/packages/desktop/src/components/prompt-input.tsx @@ -393,9 +393,11 @@ export const PromptInput: Component = (props) => {
{i.name} - - {DateTime.fromFormat(i.release_date, "yyyy-MM-dd").toFormat("LLL yyyy")} - + + + {DateTime.fromFormat(i.release_date, "yyyy-MM-dd").toFormat("LLL yyyy")} + +
diff --git a/packages/desktop/src/context/local.tsx b/packages/desktop/src/context/local.tsx index 91c1d688..9c4d70fc 100644 --- a/packages/desktop/src/context/local.tsx +++ b/packages/desktop/src/context/local.tsx @@ -481,7 +481,6 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ if (!message) return "" if (Array.isArray(message)) return message.map((m) => getMessageText(m)).join(" ") const fileParts = sync.data.part[message.id]?.filter((p) => p.type === "file") - console.log(fileParts) return sync.data.part[message.id] ?.filter((p) => p.type === "text") From 4407d5d96f5a2f1225b52238c186ce9820debac3 Mon Sep 17 00:00:00 2001 From: Aiden Cline Date: Wed, 29 Oct 2025 10:46:57 -0500 Subject: [PATCH 6/9] fix: ensure tool inputs are zod validated --- packages/opencode/src/session/prompt.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index f403ef22..32c72e23 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -533,6 +533,7 @@ export namespace SessionPrompt { args, }, ) + item.parameters.parse(args) const result = await item.execute(args, { sessionID: input.sessionID, abort: options.abortSignal!, From 4d6e2d8efc483796c02738dca5827a776acbb152 Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Wed, 29 Oct 2025 11:53:25 -0400 Subject: [PATCH 7/9] autoupgrade latest major only --- packages/opencode/src/installation/index.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/opencode/src/installation/index.ts b/packages/opencode/src/installation/index.ts index 19c6674c..f2df5b40 100644 --- a/packages/opencode/src/installation/index.ts +++ b/packages/opencode/src/installation/index.ts @@ -142,7 +142,9 @@ export namespace Installation { export const USER_AGENT = `opencode/${CHANNEL}/${VERSION}` export async function latest() { - return fetch(`https://registry.npmjs.org/opencode-ai/${CHANNEL}`) + const [major] = VERSION.split(".").map((x) => Number(x)) + const channel = CHANNEL === "latest" ? `latest-${major}` : CHANNEL + return fetch(`https://registry.npmjs.org/opencode-ai/${channel}`) .then((res) => { if (!res.ok) throw new Error(res.statusText) return res.json() From a2ab37c1b6fe67977b091d88d3e113259aae66a8 Mon Sep 17 00:00:00 2001 From: opencode Date: Wed, 29 Oct 2025 16:01:53 +0000 Subject: [PATCH 8/9] release: v0.15.25 --- bun.lock | 22 +++++++++++----------- 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/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/slack/package.json | 2 +- packages/ui/package.json | 2 +- packages/web/package.json | 2 +- sdks/vscode/package.json | 2 +- 14 files changed, 24 insertions(+), 24 deletions(-) diff --git a/bun.lock b/bun.lock index bc1be2ab..d5b1451f 100644 --- a/bun.lock +++ b/bun.lock @@ -37,7 +37,7 @@ }, "packages/console/core": { "name": "@opencode-ai/console-core", - "version": "0.15.24", + "version": "0.15.25", "dependencies": { "@aws-sdk/client-sts": "3.782.0", "@jsx-email/render": "1.1.1", @@ -64,7 +64,7 @@ }, "packages/console/function": { "name": "@opencode-ai/console-function", - "version": "0.15.24", + "version": "0.15.25", "dependencies": { "@ai-sdk/anthropic": "2.0.0", "@ai-sdk/openai": "2.0.2", @@ -88,7 +88,7 @@ }, "packages/console/mail": { "name": "@opencode-ai/console-mail", - "version": "0.15.24", + "version": "0.15.25", "dependencies": { "@jsx-email/all": "2.2.3", "@jsx-email/cli": "1.4.3", @@ -109,7 +109,7 @@ }, "packages/desktop": { "name": "@opencode-ai/desktop", - "version": "0.15.24", + "version": "0.15.25", "dependencies": { "@kobalte/core": "catalog:", "@opencode-ai/sdk": "workspace:*", @@ -150,7 +150,7 @@ }, "packages/function": { "name": "@opencode-ai/function", - "version": "0.15.24", + "version": "0.15.25", "dependencies": { "@octokit/auth-app": "8.0.1", "@octokit/rest": "22.0.0", @@ -166,7 +166,7 @@ }, "packages/opencode": { "name": "opencode", - "version": "0.15.24", + "version": "0.15.25", "bin": { "opencode": "./bin/opencode", }, @@ -230,7 +230,7 @@ }, "packages/plugin": { "name": "@opencode-ai/plugin", - "version": "0.15.24", + "version": "0.15.25", "dependencies": { "@opencode-ai/sdk": "workspace:*", "zod": "catalog:", @@ -250,7 +250,7 @@ }, "packages/sdk/js": { "name": "@opencode-ai/sdk", - "version": "0.15.24", + "version": "0.15.25", "devDependencies": { "@hey-api/openapi-ts": "0.81.0", "@tsconfig/node22": "catalog:", @@ -261,7 +261,7 @@ }, "packages/slack": { "name": "@opencode-ai/slack", - "version": "0.15.24", + "version": "0.15.25", "dependencies": { "@opencode-ai/sdk": "workspace:*", "@slack/bolt": "^3.17.1", @@ -274,7 +274,7 @@ }, "packages/ui": { "name": "@opencode-ai/ui", - "version": "0.15.24", + "version": "0.15.25", "dependencies": { "@kobalte/core": "catalog:", "@pierre/precision-diffs": "catalog:", @@ -297,7 +297,7 @@ }, "packages/web": { "name": "@opencode-ai/web", - "version": "0.15.24", + "version": "0.15.25", "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 0fff7028..04c1ecde 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.15.24" + "version": "0.15.25" }, "dependencies": { "@ibm/plex": "6.4.1", diff --git a/packages/console/core/package.json b/packages/console/core/package.json index 29aad16b..09ae9301 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.15.24", + "version": "0.15.25", "private": true, "type": "module", "dependencies": { diff --git a/packages/console/function/package.json b/packages/console/function/package.json index fec9b5d0..6de6c673 100644 --- a/packages/console/function/package.json +++ b/packages/console/function/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-function", - "version": "0.15.24", + "version": "0.15.25", "$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 7598cb2b..a0f636f8 100644 --- a/packages/console/mail/package.json +++ b/packages/console/mail/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-mail", - "version": "0.15.24", + "version": "0.15.25", "dependencies": { "@jsx-email/all": "2.2.3", "@jsx-email/cli": "1.4.3", diff --git a/packages/desktop/package.json b/packages/desktop/package.json index 3a54ec26..00d2f531 100644 --- a/packages/desktop/package.json +++ b/packages/desktop/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/desktop", - "version": "0.15.24", + "version": "0.15.25", "description": "", "type": "module", "scripts": { diff --git a/packages/function/package.json b/packages/function/package.json index d5b39056..1bd7bc49 100644 --- a/packages/function/package.json +++ b/packages/function/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/function", - "version": "0.15.24", + "version": "0.15.25", "$schema": "https://json.schemastore.org/package.json", "private": true, "type": "module", diff --git a/packages/opencode/package.json b/packages/opencode/package.json index 90e1f6ab..541a38e4 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "0.15.24", + "version": "0.15.25", "name": "opencode", "type": "module", "private": true, diff --git a/packages/plugin/package.json b/packages/plugin/package.json index 73317d55..85a2df16 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.15.24", + "version": "0.15.25", "type": "module", "scripts": { "typecheck": "tsgo --noEmit", diff --git a/packages/sdk/js/package.json b/packages/sdk/js/package.json index 416a0cb9..de13658b 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.15.24", + "version": "0.15.25", "type": "module", "scripts": { "typecheck": "tsgo --noEmit", diff --git a/packages/slack/package.json b/packages/slack/package.json index 3e9e857f..2efcccc7 100644 --- a/packages/slack/package.json +++ b/packages/slack/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/slack", - "version": "0.15.24", + "version": "0.15.25", "type": "module", "scripts": { "dev": "bun run src/index.ts", diff --git a/packages/ui/package.json b/packages/ui/package.json index 16608105..74c90f5a 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/ui", - "version": "0.15.24", + "version": "0.15.25", "type": "module", "exports": { ".": "./src/components/index.ts", diff --git a/packages/web/package.json b/packages/web/package.json index a7242a1f..dc8f0fef 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -1,7 +1,7 @@ { "name": "@opencode-ai/web", "type": "module", - "version": "0.15.24", + "version": "0.15.25", "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 bcb98bf6..af0918f9 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.15.24", + "version": "0.15.25", "publisher": "sst-dev", "repository": { "type": "git", From 58752574629fdf2ad6d87861c3dd5e9a89c42805 Mon Sep 17 00:00:00 2001 From: Aiden Cline Date: Wed, 29 Oct 2025 11:08:46 -0500 Subject: [PATCH 9/9] ignore: add label --- CONTRIBUTING.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8be1b4db..41ca2f1c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -17,6 +17,7 @@ If you are unsure if a PR would be accepted, feel free to ask a maintainer or lo - [`help wanted`](https://github.com/sst/opencode/issues?q=is%3Aissue%20state%3Aopen%20label%3Ahelp-wanted) - [`good first issue`](https://github.com/sst/opencode/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22good%20first%20issue%22) - [`bug`](https://github.com/sst/opencode/issues?q=is%3Aissue%20state%3Aopen%20label%3Abug) +- [`perf`](https://github.com/sst/opencode/issues?q=is%3Aopen%20is%3Aissue%20label%3A%22perf%22) > [!NOTE] > PRs that ignore these guardrails will likely be closed.