diff --git a/bun.lock b/bun.lock index ec7c2c1ebf52..c8cb37f4e50c 100644 --- a/bun.lock +++ b/bun.lock @@ -29,7 +29,7 @@ }, "packages/app": { "name": "@opencode-ai/app", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@corvu/drawer": "catalog:", "@dnd-kit/abstract": "0.5.0", @@ -96,7 +96,7 @@ }, "packages/cli": { "name": "@opencode-ai/cli", - "version": "1.18.24", + "version": "1.18.25", "bin": { "lildax": "./bin/lildax.cjs", }, @@ -144,7 +144,7 @@ }, "packages/codemode": { "name": "@opencode-ai/codemode", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "acorn": "8.15.0", "effect": "catalog:", @@ -158,7 +158,7 @@ }, "packages/console/app": { "name": "@opencode-ai/console-app", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@cloudflare/vite-plugin": "1.15.2", "@ibm/plex": "6.4.1", @@ -194,7 +194,7 @@ }, "packages/console/core": { "name": "@opencode-ai/console-core", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@aws-sdk/client-sts": "3.782.0", "@jsx-email/render": "1.1.1", @@ -221,7 +221,7 @@ }, "packages/console/function": { "name": "@opencode-ai/console-function", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@ai-sdk/anthropic": "3.0.82", "@ai-sdk/openai": "3.0.48", @@ -244,7 +244,7 @@ }, "packages/console/mail": { "name": "@opencode-ai/console-mail", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@jsx-email/all": "2.2.3", "@jsx-email/cli": "1.4.3", @@ -268,7 +268,7 @@ }, "packages/console/support": { "name": "@opencode-ai/console-support", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@cloudflare/vite-plugin": "1.15.2", "@opencode-ai/console-core": "workspace:*", @@ -288,7 +288,7 @@ }, "packages/core": { "name": "@opencode-ai/core", - "version": "1.18.24", + "version": "1.18.25", "bin": { "opencode": "./bin/opencode", }, @@ -382,7 +382,7 @@ }, "packages/desktop": { "name": "@opencode-ai/desktop", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@zip.js/zip.js": "2.7.62", "drizzle-orm": "catalog:", @@ -436,7 +436,7 @@ }, "packages/effect-drizzle-sqlite": { "name": "@opencode-ai/effect-drizzle-sqlite", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "drizzle-orm": "catalog:", "effect": "catalog:", @@ -450,7 +450,7 @@ }, "packages/effect-sqlite-node": { "name": "@opencode-ai/effect-sqlite-node", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "effect": "catalog:", }, @@ -462,7 +462,7 @@ }, "packages/enterprise": { "name": "@opencode-ai/enterprise", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@hono/standard-validator": "catalog:", "@opencode-ai/core": "workspace:*", @@ -494,7 +494,7 @@ }, "packages/function": { "name": "@opencode-ai/function", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@octokit/auth-app": "8.0.1", "@octokit/rest": "catalog:", @@ -510,7 +510,7 @@ }, "packages/http-recorder": { "name": "@opencode-ai/http-recorder", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@effect/platform-node": "4.0.0-beta.83", "@effect/platform-node-shared": "4.0.0-beta.83", @@ -541,7 +541,7 @@ }, "packages/llm": { "name": "@opencode-ai/llm", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@opencode-ai/schema": "workspace:*", "@smithy/eventstream-codec": "4.2.14", @@ -560,7 +560,7 @@ }, "packages/opencode": { "name": "opencode", - "version": "1.18.24", + "version": "1.18.25", "bin": { "opencode": "./bin/opencode", }, @@ -691,7 +691,7 @@ }, "packages/plugin": { "name": "@opencode-ai/plugin", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@ai-sdk/provider": "3.0.8", "@opencode-ai/sdk": "workspace:*", @@ -767,7 +767,7 @@ }, "packages/sdk/js": { "name": "@opencode-ai/sdk", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "cross-spawn": "catalog:", }, @@ -782,7 +782,7 @@ }, "packages/server": { "name": "@opencode-ai/server", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@opencode-ai/core": "workspace:*", "@opencode-ai/protocol": "workspace:*", @@ -797,7 +797,7 @@ }, "packages/session-ui": { "name": "@opencode-ai/session-ui", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@kobalte/core": "catalog:", "@opencode-ai/client": "file:../app/vendor/opencode-ai-client-1.17.13-v2.tgz", @@ -837,7 +837,7 @@ }, "packages/slack": { "name": "@opencode-ai/slack", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@opencode-ai/sdk": "workspace:*", "@slack/bolt": "^3.17.1", @@ -850,7 +850,7 @@ }, "packages/stats/app": { "name": "@opencode-ai/stats-app", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@ibm/plex": "6.4.1", "@kobalte/core": "catalog:", @@ -877,7 +877,7 @@ }, "packages/stats/core": { "name": "@opencode-ai/stats-core", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@aws-sdk/client-athena": "3.933.0", "@planetscale/database": "1.19.0", @@ -896,7 +896,7 @@ }, "packages/stats/server": { "name": "@opencode-ai/stats-server", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@aws-sdk/client-firehose": "3.933.0", "@effect/platform-node": "catalog:", @@ -938,7 +938,7 @@ }, "packages/tui": { "name": "@opencode-ai/tui", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@opencode-ai/core": "workspace:*", "@opencode-ai/plugin": "workspace:*", @@ -965,7 +965,7 @@ }, "packages/ui": { "name": "@opencode-ai/ui", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@kobalte/core": "catalog:", "@pierre/diffs": "catalog:", @@ -1016,7 +1016,7 @@ }, "packages/web": { "name": "@opencode-ai/web", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@astrojs/cloudflare": "12.6.3", "@astrojs/markdown-remark": "6.3.1", diff --git a/packages/app/package.json b/packages/app/package.json index fa7e969d067f..e0a1d076e73d 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/app", - "version": "1.18.24", + "version": "1.18.25", "description": "", "type": "module", "exports": { diff --git a/packages/cli/package.json b/packages/cli/package.json index cdd74c067ca4..207967c19c01 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/cli", - "version": "1.18.24", + "version": "1.18.25", "type": "module", "license": "MIT", "bin": { diff --git a/packages/codemode/package.json b/packages/codemode/package.json index 9772aeee2311..400451efca64 100644 --- a/packages/codemode/package.json +++ b/packages/codemode/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/codemode", - "version": "1.18.24", + "version": "1.18.25", "description": "Effect-native confined code execution over schema-described tools", "private": true, "type": "module", diff --git a/packages/console/app/package.json b/packages/console/app/package.json index 908421539385..e83f568c3be2 100644 --- a/packages/console/app/package.json +++ b/packages/console/app/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-app", - "version": "1.18.24", + "version": "1.18.25", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/console/core/package.json b/packages/console/core/package.json index 729ce531ff50..0ce0fa748339 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": "1.18.24", + "version": "1.18.25", "private": true, "type": "module", "license": "MIT", diff --git a/packages/console/function/package.json b/packages/console/function/package.json index 9afac31c073f..734a3efe345e 100644 --- a/packages/console/function/package.json +++ b/packages/console/function/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-function", - "version": "1.18.24", + "version": "1.18.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 09e59abd7229..a859c292f0f4 100644 --- a/packages/console/mail/package.json +++ b/packages/console/mail/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-mail", - "version": "1.18.24", + "version": "1.18.25", "dependencies": { "@jsx-email/all": "2.2.3", "@jsx-email/cli": "1.4.3", diff --git a/packages/console/support/package.json b/packages/console/support/package.json index f1a837f147a5..c68e83fcdf37 100644 --- a/packages/console/support/package.json +++ b/packages/console/support/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-support", - "version": "1.18.24", + "version": "1.18.25", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/core/package.json b/packages/core/package.json index c185ce9233cf..37afa0b65b2c 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.24", + "version": "1.18.25", "name": "@opencode-ai/core", "type": "module", "license": "MIT", diff --git a/packages/desktop/package.json b/packages/desktop/package.json index 91cbafd1e4ab..d4d2532c522f 100644 --- a/packages/desktop/package.json +++ b/packages/desktop/package.json @@ -1,7 +1,7 @@ { "name": "@opencode-ai/desktop", "private": true, - "version": "1.18.24", + "version": "1.18.25", "type": "module", "license": "MIT", "homepage": "https://opencode.ai", diff --git a/packages/effect-drizzle-sqlite/package.json b/packages/effect-drizzle-sqlite/package.json index ed29249c656e..eb8103695c4e 100644 --- a/packages/effect-drizzle-sqlite/package.json +++ b/packages/effect-drizzle-sqlite/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.24", + "version": "1.18.25", "name": "@opencode-ai/effect-drizzle-sqlite", "type": "module", "license": "MIT", diff --git a/packages/effect-sqlite-node/package.json b/packages/effect-sqlite-node/package.json index 0de3380caab1..829aab45fab8 100644 --- a/packages/effect-sqlite-node/package.json +++ b/packages/effect-sqlite-node/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.24", + "version": "1.18.25", "name": "@opencode-ai/effect-sqlite-node", "type": "module", "license": "MIT", diff --git a/packages/enterprise/package.json b/packages/enterprise/package.json index 6f38a4ce224d..6e70986db787 100644 --- a/packages/enterprise/package.json +++ b/packages/enterprise/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/enterprise", - "version": "1.18.24", + "version": "1.18.25", "private": true, "type": "module", "license": "MIT", diff --git a/packages/function/package.json b/packages/function/package.json index c5da6ac18ef0..1c0931b39538 100644 --- a/packages/function/package.json +++ b/packages/function/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/function", - "version": "1.18.24", + "version": "1.18.25", "$schema": "https://json.schemastore.org/package.json", "private": true, "type": "module", diff --git a/packages/http-recorder/package.json b/packages/http-recorder/package.json index 6a4f06694730..b7041f7225d7 100644 --- a/packages/http-recorder/package.json +++ b/packages/http-recorder/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.24", + "version": "1.18.25", "name": "@opencode-ai/http-recorder", "description": "Record and replay Effect HTTP client traffic with deterministic cassettes", "type": "module", diff --git a/packages/llm/package.json b/packages/llm/package.json index bbd432a22210..e7b93f1fda7a 100644 --- a/packages/llm/package.json +++ b/packages/llm/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.24", + "version": "1.18.25", "name": "@opencode-ai/llm", "type": "module", "license": "MIT", diff --git a/packages/opencode/package.json b/packages/opencode/package.json index 007c0bcaddd7..45c6110363ec 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.18.24", + "version": "1.18.25", "name": "opencode", "type": "module", "license": "MIT", diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index 0f85d44f209b..5b06a70e4406 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -1078,6 +1078,39 @@ const layer = Layer.effect( throw new Error("Impossible") }) + const LOOP_GUARD_CONSECUTIVE_IDENTICAL_TOOL_CALLS = 10 + + function canonicalize(value: unknown): string { + if (value === undefined) return "undefined" + if (value === null || typeof value !== "object") return JSON.stringify(value) + if (Array.isArray(value)) return `[${value.map(canonicalize).join(",")}]` + const entries = Object.entries(value as Record) + .filter(([, v]) => v !== undefined) + .sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0)) + return `{${entries.map(([k, v]) => `${JSON.stringify(k)}:${canonicalize(v)}`).join(",")}}` + } + + function identicalToolCallLoop( + msgs: SessionV1.WithParts[], + userID: string, + ): { tool: string; count: number } | undefined { + const calls: { tool: string; signature: string }[] = [] + for (const msg of msgs) { + if (msg.info.role !== "assistant" || msg.info.parentID !== userID) continue + for (const part of msg.parts) { + if (part.type !== "tool" || part.metadata?.providerExecuted || isOrphanedInterruptedTool(part)) continue + const input = "input" in part.state ? part.state.input : undefined + calls.push({ tool: part.tool, signature: `${part.tool}:${canonicalize(input)}` }) + } + } + if (calls.length < LOOP_GUARD_CONSECUTIVE_IDENTICAL_TOOL_CALLS) return undefined + const tail = calls.slice(-LOOP_GUARD_CONSECUTIVE_IDENTICAL_TOOL_CALLS) + if (tail.every((call) => call.signature === tail[0].signature)) { + return { tool: tail[0].tool, count: tail.length } + } + return undefined + } + const runLoop: (sessionID: SessionID) => Effect.Effect = Effect.fn("SessionPrompt.run")( function* (sessionID: SessionID) { const ctx = yield* InstanceState.context @@ -1129,6 +1162,21 @@ const layer = Layer.effect( break } + const loopTrip = identicalToolCallLoop(msgs, lastUser.id) + if (loopTrip) { + const error = new NamedError.Unknown({ + message: `Stopped: tool "${loopTrip.tool}" was called ${loopTrip.count} consecutive times with identical arguments. This looks like an agent loop; aborting to prevent unbounded token burn.`, + ref: "repeated-identical-tool-call", + }).toObject() + yield* Effect.logWarning("loop exit: repeated identical tool calls", { + "session.id": sessionID, + tool: loopTrip.tool, + count: loopTrip.count, + }) + yield* events.publish(Session.Event.Error, { sessionID, error }) + break + } + step++ if (step === 1) yield* title({ diff --git a/packages/opencode/test/session/prompt.test.ts b/packages/opencode/test/session/prompt.test.ts index da6e0f8d036f..d04321cf2846 100644 --- a/packages/opencode/test/session/prompt.test.ts +++ b/packages/opencode/test/session/prompt.test.ts @@ -628,6 +628,89 @@ it.instance("legacy prompt emits message events without session.next events", () }), ) +it.instance("loop aborts on 10 consecutive identical tool calls", () => + Effect.gen(function* () { + const { llm } = yield* useServerConfig(providerCfg) + const events = yield* EventV2Bridge.Service + const prompt = yield* SessionPrompt.Service + const sessions = yield* Session.Service + const chat = yield* sessions.create({ title: "Pinned" }) + const errors: NonNullable[] = [] + const off = yield* events.listen((event) => { + if (event.type !== Session.Event.Error.type) return Effect.void + const data = event.data as typeof Session.Event.Error.data.Type + if (data.sessionID === chat.id && data.error) errors.push(data.error) + return Effect.void + }) + + yield* prompt.prompt({ + sessionID: chat.id, + agent: "build", + noReply: true, + parts: [{ type: "text", text: "hello" }], + }) + for (let i = 0; i < 12; i++) yield* llm.tool("glob", { pattern: "**/*.txt" }) + yield* llm.text("should never be consumed") + + const result = yield* prompt.loop({ sessionID: chat.id }) + yield* off + + expect(yield* llm.calls).toBe(10) + expect(result.info.role).toBe("assistant") + expect(errors).toContainEqual( + expect.objectContaining({ + name: "UnknownError", + data: expect.objectContaining({ + ref: "repeated-identical-tool-call", + message: expect.stringContaining('tool "glob" was called 10 consecutive times'), + }), + }), + ) + }), +) + +it.instance("loop does not abort below the identical-call threshold", () => + Effect.gen(function* () { + const { llm } = yield* useServerConfig(providerCfg) + const prompt = yield* SessionPrompt.Service + const sessions = yield* Session.Service + const chat = yield* sessions.create({ title: "Pinned" }) + yield* prompt.prompt({ + sessionID: chat.id, + agent: "build", + noReply: true, + parts: [{ type: "text", text: "hello" }], + }) + for (let i = 0; i < 9; i++) yield* llm.tool("glob", { pattern: "**/*.txt" }) + yield* llm.text("done") + + const result = yield* prompt.loop({ sessionID: chat.id }) + expect(yield* llm.calls).toBe(10) + expect(result.parts.some((part) => part.type === "text" && part.text === "done")).toBe(true) + }), +) + +it.instance("loop does not abort on alternating tool call arguments", () => + Effect.gen(function* () { + const { llm } = yield* useServerConfig(providerCfg) + const prompt = yield* SessionPrompt.Service + const sessions = yield* Session.Service + const chat = yield* sessions.create({ title: "Pinned" }) + yield* prompt.prompt({ + sessionID: chat.id, + agent: "build", + noReply: true, + parts: [{ type: "text", text: "hello" }], + }) + for (let i = 0; i < 12; i++) yield* llm.tool("glob", { pattern: i % 2 === 0 ? "**/*.txt" : "**/*.ts" }) + yield* llm.text("done") + + const result = yield* prompt.loop({ sessionID: chat.id }) + expect(yield* llm.calls).toBe(13) + expect(result.parts.some((part) => part.type === "text" && part.text === "done")).toBe(true) + }), +) + it.instance("loop surfaces content-filter finishes as session errors", () => Effect.gen(function* () { const { llm } = yield* useServerConfig(providerCfg) diff --git a/packages/plugin/package.json b/packages/plugin/package.json index 9f3de7c8ca88..60c3cad95fb3 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": "1.18.24", + "version": "1.18.25", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/sdk/js/package.json b/packages/sdk/js/package.json index ae7135ac96e7..66b07a349f6a 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": "1.18.24", + "version": "1.18.25", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/server/package.json b/packages/server/package.json index d33ddbe09489..7c65eedadade 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/server", - "version": "1.18.24", + "version": "1.18.25", "private": true, "type": "module", "license": "MIT", diff --git a/packages/session-ui/package.json b/packages/session-ui/package.json index a373c2ab0eb7..16a2d88151e0 100644 --- a/packages/session-ui/package.json +++ b/packages/session-ui/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/session-ui", - "version": "1.18.24", + "version": "1.18.25", "private": true, "type": "module", "license": "MIT", diff --git a/packages/slack/package.json b/packages/slack/package.json index a2d71e2b5f61..ecaa750fd542 100644 --- a/packages/slack/package.json +++ b/packages/slack/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/slack", - "version": "1.18.24", + "version": "1.18.25", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/stats/app/package.json b/packages/stats/app/package.json index f35c12961913..a53fca609a3e 100644 --- a/packages/stats/app/package.json +++ b/packages/stats/app/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/stats-app", - "version": "1.18.24", + "version": "1.18.25", "private": true, "type": "module", "license": "MIT", diff --git a/packages/stats/core/package.json b/packages/stats/core/package.json index 882f51f403ad..5d333cfce322 100644 --- a/packages/stats/core/package.json +++ b/packages/stats/core/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/stats-core", - "version": "1.18.24", + "version": "1.18.25", "private": true, "type": "module", "license": "MIT", diff --git a/packages/stats/server/package.json b/packages/stats/server/package.json index 135e884b3ba9..0681be86c3e7 100644 --- a/packages/stats/server/package.json +++ b/packages/stats/server/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/stats-server", - "version": "1.18.24", + "version": "1.18.25", "private": true, "type": "module", "license": "MIT", diff --git a/packages/tui/package.json b/packages/tui/package.json index cc211c1d61e0..d208dfa62655 100644 --- a/packages/tui/package.json +++ b/packages/tui/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/tui", - "version": "1.18.24", + "version": "1.18.25", "private": true, "type": "module", "license": "MIT", diff --git a/packages/ui/package.json b/packages/ui/package.json index a62dc8dbfceb..dc3052a6cd0d 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/ui", - "version": "1.18.24", + "version": "1.18.25", "type": "module", "license": "MIT", "repository": { diff --git a/packages/web/package.json b/packages/web/package.json index de7043fc9f6d..5552d1fffeb1 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -2,7 +2,7 @@ "name": "@opencode-ai/web", "type": "module", "license": "MIT", - "version": "1.18.24", + "version": "1.18.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 f7526a3689b3..de3b012f3ec9 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": "1.18.24", + "version": "1.18.25", "publisher": "sst-dev", "repository": { "type": "git",