From bddf83008360aa6633a4890a89c1b184a0169af3 Mon Sep 17 00:00:00 2001 From: opencode Date: Wed, 15 Apr 2026 00:03:43 +0000 Subject: release: v1.4.4 --- packages/function/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'packages/function') diff --git a/packages/function/package.json b/packages/function/package.json index 76262c25a..33023ff13 100644 --- a/packages/function/package.json +++ b/packages/function/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/function", - "version": "1.4.3", + "version": "1.4.4", "$schema": "https://json.schemastore.org/package.json", "private": true, "type": "module", -- cgit v1.2.3 From dfc72838d70bea6df14859e90c6df91507b5f406 Mon Sep 17 00:00:00 2001 From: opencode Date: Wed, 15 Apr 2026 04:25:18 +0000 Subject: release: v1.4.5 --- bun.lock | 34 +++++++++++++++++----------------- packages/app/package.json | 2 +- 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-electron/package.json | 2 +- packages/desktop/package.json | 2 +- packages/enterprise/package.json | 2 +- packages/extensions/zed/extension.toml | 12 ++++++------ packages/function/package.json | 2 +- packages/opencode/package.json | 2 +- packages/plugin/package.json | 2 +- packages/sdk/js/package.json | 2 +- packages/server/package.json | 2 +- packages/slack/package.json | 2 +- packages/ui/package.json | 2 +- packages/util/package.json | 2 +- packages/web/package.json | 2 +- sdks/vscode/package.json | 2 +- 20 files changed, 41 insertions(+), 41 deletions(-) (limited to 'packages/function') diff --git a/bun.lock b/bun.lock index 3cb0b868d..210ae6014 100644 --- a/bun.lock +++ b/bun.lock @@ -27,7 +27,7 @@ }, "packages/app": { "name": "@opencode-ai/app", - "version": "1.4.4", + "version": "1.4.5", "dependencies": { "@kobalte/core": "catalog:", "@opencode-ai/sdk": "workspace:*", @@ -81,7 +81,7 @@ }, "packages/console/app": { "name": "@opencode-ai/console-app", - "version": "1.4.4", + "version": "1.4.5", "dependencies": { "@cloudflare/vite-plugin": "1.15.2", "@ibm/plex": "6.4.1", @@ -115,7 +115,7 @@ }, "packages/console/core": { "name": "@opencode-ai/console-core", - "version": "1.4.4", + "version": "1.4.5", "dependencies": { "@aws-sdk/client-sts": "3.782.0", "@jsx-email/render": "1.1.1", @@ -142,7 +142,7 @@ }, "packages/console/function": { "name": "@opencode-ai/console-function", - "version": "1.4.4", + "version": "1.4.5", "dependencies": { "@ai-sdk/anthropic": "3.0.64", "@ai-sdk/openai": "3.0.48", @@ -166,7 +166,7 @@ }, "packages/console/mail": { "name": "@opencode-ai/console-mail", - "version": "1.4.4", + "version": "1.4.5", "dependencies": { "@jsx-email/all": "2.2.3", "@jsx-email/cli": "1.4.3", @@ -190,7 +190,7 @@ }, "packages/desktop": { "name": "@opencode-ai/desktop", - "version": "1.4.4", + "version": "1.4.5", "dependencies": { "@opencode-ai/app": "workspace:*", "@opencode-ai/ui": "workspace:*", @@ -223,7 +223,7 @@ }, "packages/desktop-electron": { "name": "@opencode-ai/desktop-electron", - "version": "1.4.4", + "version": "1.4.5", "dependencies": { "effect": "catalog:", "electron-context-menu": "4.1.2", @@ -266,7 +266,7 @@ }, "packages/enterprise": { "name": "@opencode-ai/enterprise", - "version": "1.4.4", + "version": "1.4.5", "dependencies": { "@opencode-ai/ui": "workspace:*", "@opencode-ai/util": "workspace:*", @@ -295,7 +295,7 @@ }, "packages/function": { "name": "@opencode-ai/function", - "version": "1.4.4", + "version": "1.4.5", "dependencies": { "@octokit/auth-app": "8.0.1", "@octokit/rest": "catalog:", @@ -311,7 +311,7 @@ }, "packages/opencode": { "name": "opencode", - "version": "1.4.4", + "version": "1.4.5", "bin": { "opencode": "./bin/opencode", }, @@ -455,7 +455,7 @@ }, "packages/plugin": { "name": "@opencode-ai/plugin", - "version": "1.4.4", + "version": "1.4.5", "dependencies": { "@opencode-ai/sdk": "workspace:*", "effect": "catalog:", @@ -490,7 +490,7 @@ }, "packages/sdk/js": { "name": "@opencode-ai/sdk", - "version": "1.4.4", + "version": "1.4.5", "dependencies": { "cross-spawn": "catalog:", }, @@ -505,7 +505,7 @@ }, "packages/server": { "name": "@opencode-ai/server", - "version": "1.4.4", + "version": "1.4.5", "dependencies": { "effect": "catalog:", }, @@ -515,7 +515,7 @@ }, "packages/slack": { "name": "@opencode-ai/slack", - "version": "1.4.4", + "version": "1.4.5", "dependencies": { "@opencode-ai/sdk": "workspace:*", "@slack/bolt": "^3.17.1", @@ -550,7 +550,7 @@ }, "packages/ui": { "name": "@opencode-ai/ui", - "version": "1.4.4", + "version": "1.4.5", "dependencies": { "@kobalte/core": "catalog:", "@opencode-ai/sdk": "workspace:*", @@ -599,7 +599,7 @@ }, "packages/util": { "name": "@opencode-ai/util", - "version": "1.4.4", + "version": "1.4.5", "dependencies": { "zod": "catalog:", }, @@ -610,7 +610,7 @@ }, "packages/web": { "name": "@opencode-ai/web", - "version": "1.4.4", + "version": "1.4.5", "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 639d6e76f..a44897d32 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/app", - "version": "1.4.4", + "version": "1.4.5", "description": "", "type": "module", "exports": { diff --git a/packages/console/app/package.json b/packages/console/app/package.json index 2c1fe6775..947c0b806 100644 --- a/packages/console/app/package.json +++ b/packages/console/app/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-app", - "version": "1.4.4", + "version": "1.4.5", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/console/core/package.json b/packages/console/core/package.json index b69aa3add..7c7d3f037 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.4.4", + "version": "1.4.5", "private": true, "type": "module", "license": "MIT", diff --git a/packages/console/function/package.json b/packages/console/function/package.json index 18729e604..dd620db10 100644 --- a/packages/console/function/package.json +++ b/packages/console/function/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-function", - "version": "1.4.4", + "version": "1.4.5", "$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 eccb128ac..29e3bd7c3 100644 --- a/packages/console/mail/package.json +++ b/packages/console/mail/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-mail", - "version": "1.4.4", + "version": "1.4.5", "dependencies": { "@jsx-email/all": "2.2.3", "@jsx-email/cli": "1.4.3", diff --git a/packages/desktop-electron/package.json b/packages/desktop-electron/package.json index bcefa0e1f..6d32a135a 100644 --- a/packages/desktop-electron/package.json +++ b/packages/desktop-electron/package.json @@ -1,7 +1,7 @@ { "name": "@opencode-ai/desktop-electron", "private": true, - "version": "1.4.4", + "version": "1.4.5", "type": "module", "license": "MIT", "homepage": "https://opencode.ai", diff --git a/packages/desktop/package.json b/packages/desktop/package.json index 78ecccd23..3150e40c9 100644 --- a/packages/desktop/package.json +++ b/packages/desktop/package.json @@ -1,7 +1,7 @@ { "name": "@opencode-ai/desktop", "private": true, - "version": "1.4.4", + "version": "1.4.5", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/enterprise/package.json b/packages/enterprise/package.json index 65c2e947b..624c85c89 100644 --- a/packages/enterprise/package.json +++ b/packages/enterprise/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/enterprise", - "version": "1.4.4", + "version": "1.4.5", "private": true, "type": "module", "license": "MIT", diff --git a/packages/extensions/zed/extension.toml b/packages/extensions/zed/extension.toml index 5ad047501..1ea6b0604 100644 --- a/packages/extensions/zed/extension.toml +++ b/packages/extensions/zed/extension.toml @@ -1,7 +1,7 @@ id = "opencode" name = "OpenCode" description = "The open source coding agent." -version = "1.4.4" +version = "1.4.5" schema_version = 1 authors = ["Anomaly"] repository = "https://github.com/anomalyco/opencode" @@ -11,26 +11,26 @@ name = "OpenCode" icon = "./icons/opencode.svg" [agent_servers.opencode.targets.darwin-aarch64] -archive = "https://github.com/anomalyco/opencode/releases/download/v1.4.4/opencode-darwin-arm64.zip" +archive = "https://github.com/anomalyco/opencode/releases/download/v1.4.5/opencode-darwin-arm64.zip" cmd = "./opencode" args = ["acp"] [agent_servers.opencode.targets.darwin-x86_64] -archive = "https://github.com/anomalyco/opencode/releases/download/v1.4.4/opencode-darwin-x64.zip" +archive = "https://github.com/anomalyco/opencode/releases/download/v1.4.5/opencode-darwin-x64.zip" cmd = "./opencode" args = ["acp"] [agent_servers.opencode.targets.linux-aarch64] -archive = "https://github.com/anomalyco/opencode/releases/download/v1.4.4/opencode-linux-arm64.tar.gz" +archive = "https://github.com/anomalyco/opencode/releases/download/v1.4.5/opencode-linux-arm64.tar.gz" cmd = "./opencode" args = ["acp"] [agent_servers.opencode.targets.linux-x86_64] -archive = "https://github.com/anomalyco/opencode/releases/download/v1.4.4/opencode-linux-x64.tar.gz" +archive = "https://github.com/anomalyco/opencode/releases/download/v1.4.5/opencode-linux-x64.tar.gz" cmd = "./opencode" args = ["acp"] [agent_servers.opencode.targets.windows-x86_64] -archive = "https://github.com/anomalyco/opencode/releases/download/v1.4.4/opencode-windows-x64.zip" +archive = "https://github.com/anomalyco/opencode/releases/download/v1.4.5/opencode-windows-x64.zip" cmd = "./opencode.exe" args = ["acp"] diff --git a/packages/function/package.json b/packages/function/package.json index 33023ff13..3e6af37ad 100644 --- a/packages/function/package.json +++ b/packages/function/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/function", - "version": "1.4.4", + "version": "1.4.5", "$schema": "https://json.schemastore.org/package.json", "private": true, "type": "module", diff --git a/packages/opencode/package.json b/packages/opencode/package.json index f875a0f2a..f1c554103 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.4.4", + "version": "1.4.5", "name": "opencode", "type": "module", "license": "MIT", diff --git a/packages/plugin/package.json b/packages/plugin/package.json index 9291d0f7f..a33d1e7f9 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.4.4", + "version": "1.4.5", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/sdk/js/package.json b/packages/sdk/js/package.json index 84c085bea..5be1d438f 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.4.4", + "version": "1.4.5", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/server/package.json b/packages/server/package.json index ec4c325fd..e354fe573 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.4.4", + "version": "1.4.5", "type": "module", "license": "MIT", "exports": { diff --git a/packages/slack/package.json b/packages/slack/package.json index 62364bd14..0d888f627 100644 --- a/packages/slack/package.json +++ b/packages/slack/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/slack", - "version": "1.4.4", + "version": "1.4.5", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/ui/package.json b/packages/ui/package.json index 760f7a1ec..197e3bbd5 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/ui", - "version": "1.4.4", + "version": "1.4.5", "type": "module", "license": "MIT", "exports": { diff --git a/packages/util/package.json b/packages/util/package.json index 10f7922f4..5d9ac521b 100644 --- a/packages/util/package.json +++ b/packages/util/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/util", - "version": "1.4.4", + "version": "1.4.5", "private": true, "type": "module", "license": "MIT", diff --git a/packages/web/package.json b/packages/web/package.json index fe8d6e17c..7ebd7292e 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.4.4", + "version": "1.4.5", "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 e0b583a78..20ce31dea 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.4.4", + "version": "1.4.5", "publisher": "sst-dev", "repository": { "type": "git", -- cgit v1.2.3 From 765932199021cf1dd7a813e37da744f391752bd1 Mon Sep 17 00:00:00 2001 From: opencode Date: Wed, 15 Apr 2026 07:26:23 +0000 Subject: release: v1.4.6 --- bun.lock | 34 +++++++++++++++++----------------- packages/app/package.json | 2 +- 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-electron/package.json | 2 +- packages/desktop/package.json | 2 +- packages/enterprise/package.json | 2 +- packages/extensions/zed/extension.toml | 12 ++++++------ packages/function/package.json | 2 +- packages/opencode/package.json | 2 +- packages/plugin/package.json | 2 +- packages/sdk/js/package.json | 2 +- packages/server/package.json | 2 +- packages/slack/package.json | 2 +- packages/ui/package.json | 2 +- packages/util/package.json | 2 +- packages/web/package.json | 2 +- sdks/vscode/package.json | 2 +- 20 files changed, 41 insertions(+), 41 deletions(-) (limited to 'packages/function') diff --git a/bun.lock b/bun.lock index 210ae6014..e7085b31d 100644 --- a/bun.lock +++ b/bun.lock @@ -27,7 +27,7 @@ }, "packages/app": { "name": "@opencode-ai/app", - "version": "1.4.5", + "version": "1.4.6", "dependencies": { "@kobalte/core": "catalog:", "@opencode-ai/sdk": "workspace:*", @@ -81,7 +81,7 @@ }, "packages/console/app": { "name": "@opencode-ai/console-app", - "version": "1.4.5", + "version": "1.4.6", "dependencies": { "@cloudflare/vite-plugin": "1.15.2", "@ibm/plex": "6.4.1", @@ -115,7 +115,7 @@ }, "packages/console/core": { "name": "@opencode-ai/console-core", - "version": "1.4.5", + "version": "1.4.6", "dependencies": { "@aws-sdk/client-sts": "3.782.0", "@jsx-email/render": "1.1.1", @@ -142,7 +142,7 @@ }, "packages/console/function": { "name": "@opencode-ai/console-function", - "version": "1.4.5", + "version": "1.4.6", "dependencies": { "@ai-sdk/anthropic": "3.0.64", "@ai-sdk/openai": "3.0.48", @@ -166,7 +166,7 @@ }, "packages/console/mail": { "name": "@opencode-ai/console-mail", - "version": "1.4.5", + "version": "1.4.6", "dependencies": { "@jsx-email/all": "2.2.3", "@jsx-email/cli": "1.4.3", @@ -190,7 +190,7 @@ }, "packages/desktop": { "name": "@opencode-ai/desktop", - "version": "1.4.5", + "version": "1.4.6", "dependencies": { "@opencode-ai/app": "workspace:*", "@opencode-ai/ui": "workspace:*", @@ -223,7 +223,7 @@ }, "packages/desktop-electron": { "name": "@opencode-ai/desktop-electron", - "version": "1.4.5", + "version": "1.4.6", "dependencies": { "effect": "catalog:", "electron-context-menu": "4.1.2", @@ -266,7 +266,7 @@ }, "packages/enterprise": { "name": "@opencode-ai/enterprise", - "version": "1.4.5", + "version": "1.4.6", "dependencies": { "@opencode-ai/ui": "workspace:*", "@opencode-ai/util": "workspace:*", @@ -295,7 +295,7 @@ }, "packages/function": { "name": "@opencode-ai/function", - "version": "1.4.5", + "version": "1.4.6", "dependencies": { "@octokit/auth-app": "8.0.1", "@octokit/rest": "catalog:", @@ -311,7 +311,7 @@ }, "packages/opencode": { "name": "opencode", - "version": "1.4.5", + "version": "1.4.6", "bin": { "opencode": "./bin/opencode", }, @@ -455,7 +455,7 @@ }, "packages/plugin": { "name": "@opencode-ai/plugin", - "version": "1.4.5", + "version": "1.4.6", "dependencies": { "@opencode-ai/sdk": "workspace:*", "effect": "catalog:", @@ -490,7 +490,7 @@ }, "packages/sdk/js": { "name": "@opencode-ai/sdk", - "version": "1.4.5", + "version": "1.4.6", "dependencies": { "cross-spawn": "catalog:", }, @@ -505,7 +505,7 @@ }, "packages/server": { "name": "@opencode-ai/server", - "version": "1.4.5", + "version": "1.4.6", "dependencies": { "effect": "catalog:", }, @@ -515,7 +515,7 @@ }, "packages/slack": { "name": "@opencode-ai/slack", - "version": "1.4.5", + "version": "1.4.6", "dependencies": { "@opencode-ai/sdk": "workspace:*", "@slack/bolt": "^3.17.1", @@ -550,7 +550,7 @@ }, "packages/ui": { "name": "@opencode-ai/ui", - "version": "1.4.5", + "version": "1.4.6", "dependencies": { "@kobalte/core": "catalog:", "@opencode-ai/sdk": "workspace:*", @@ -599,7 +599,7 @@ }, "packages/util": { "name": "@opencode-ai/util", - "version": "1.4.5", + "version": "1.4.6", "dependencies": { "zod": "catalog:", }, @@ -610,7 +610,7 @@ }, "packages/web": { "name": "@opencode-ai/web", - "version": "1.4.5", + "version": "1.4.6", "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 a44897d32..9aadb774b 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/app", - "version": "1.4.5", + "version": "1.4.6", "description": "", "type": "module", "exports": { diff --git a/packages/console/app/package.json b/packages/console/app/package.json index 947c0b806..062114eeb 100644 --- a/packages/console/app/package.json +++ b/packages/console/app/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-app", - "version": "1.4.5", + "version": "1.4.6", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/console/core/package.json b/packages/console/core/package.json index 7c7d3f037..760174cf0 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.4.5", + "version": "1.4.6", "private": true, "type": "module", "license": "MIT", diff --git a/packages/console/function/package.json b/packages/console/function/package.json index dd620db10..840f32742 100644 --- a/packages/console/function/package.json +++ b/packages/console/function/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-function", - "version": "1.4.5", + "version": "1.4.6", "$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 29e3bd7c3..5aa94224e 100644 --- a/packages/console/mail/package.json +++ b/packages/console/mail/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-mail", - "version": "1.4.5", + "version": "1.4.6", "dependencies": { "@jsx-email/all": "2.2.3", "@jsx-email/cli": "1.4.3", diff --git a/packages/desktop-electron/package.json b/packages/desktop-electron/package.json index 6d32a135a..cc0bad7d7 100644 --- a/packages/desktop-electron/package.json +++ b/packages/desktop-electron/package.json @@ -1,7 +1,7 @@ { "name": "@opencode-ai/desktop-electron", "private": true, - "version": "1.4.5", + "version": "1.4.6", "type": "module", "license": "MIT", "homepage": "https://opencode.ai", diff --git a/packages/desktop/package.json b/packages/desktop/package.json index 3150e40c9..3fd02ad88 100644 --- a/packages/desktop/package.json +++ b/packages/desktop/package.json @@ -1,7 +1,7 @@ { "name": "@opencode-ai/desktop", "private": true, - "version": "1.4.5", + "version": "1.4.6", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/enterprise/package.json b/packages/enterprise/package.json index 624c85c89..0d165e95f 100644 --- a/packages/enterprise/package.json +++ b/packages/enterprise/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/enterprise", - "version": "1.4.5", + "version": "1.4.6", "private": true, "type": "module", "license": "MIT", diff --git a/packages/extensions/zed/extension.toml b/packages/extensions/zed/extension.toml index 1ea6b0604..d6be9c6b6 100644 --- a/packages/extensions/zed/extension.toml +++ b/packages/extensions/zed/extension.toml @@ -1,7 +1,7 @@ id = "opencode" name = "OpenCode" description = "The open source coding agent." -version = "1.4.5" +version = "1.4.6" schema_version = 1 authors = ["Anomaly"] repository = "https://github.com/anomalyco/opencode" @@ -11,26 +11,26 @@ name = "OpenCode" icon = "./icons/opencode.svg" [agent_servers.opencode.targets.darwin-aarch64] -archive = "https://github.com/anomalyco/opencode/releases/download/v1.4.5/opencode-darwin-arm64.zip" +archive = "https://github.com/anomalyco/opencode/releases/download/v1.4.6/opencode-darwin-arm64.zip" cmd = "./opencode" args = ["acp"] [agent_servers.opencode.targets.darwin-x86_64] -archive = "https://github.com/anomalyco/opencode/releases/download/v1.4.5/opencode-darwin-x64.zip" +archive = "https://github.com/anomalyco/opencode/releases/download/v1.4.6/opencode-darwin-x64.zip" cmd = "./opencode" args = ["acp"] [agent_servers.opencode.targets.linux-aarch64] -archive = "https://github.com/anomalyco/opencode/releases/download/v1.4.5/opencode-linux-arm64.tar.gz" +archive = "https://github.com/anomalyco/opencode/releases/download/v1.4.6/opencode-linux-arm64.tar.gz" cmd = "./opencode" args = ["acp"] [agent_servers.opencode.targets.linux-x86_64] -archive = "https://github.com/anomalyco/opencode/releases/download/v1.4.5/opencode-linux-x64.tar.gz" +archive = "https://github.com/anomalyco/opencode/releases/download/v1.4.6/opencode-linux-x64.tar.gz" cmd = "./opencode" args = ["acp"] [agent_servers.opencode.targets.windows-x86_64] -archive = "https://github.com/anomalyco/opencode/releases/download/v1.4.5/opencode-windows-x64.zip" +archive = "https://github.com/anomalyco/opencode/releases/download/v1.4.6/opencode-windows-x64.zip" cmd = "./opencode.exe" args = ["acp"] diff --git a/packages/function/package.json b/packages/function/package.json index 3e6af37ad..941f093fc 100644 --- a/packages/function/package.json +++ b/packages/function/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/function", - "version": "1.4.5", + "version": "1.4.6", "$schema": "https://json.schemastore.org/package.json", "private": true, "type": "module", diff --git a/packages/opencode/package.json b/packages/opencode/package.json index f1c554103..0f0c26ed9 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.4.5", + "version": "1.4.6", "name": "opencode", "type": "module", "license": "MIT", diff --git a/packages/plugin/package.json b/packages/plugin/package.json index a33d1e7f9..76fe2e862 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.4.5", + "version": "1.4.6", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/sdk/js/package.json b/packages/sdk/js/package.json index 5be1d438f..49c441600 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.4.5", + "version": "1.4.6", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/server/package.json b/packages/server/package.json index e354fe573..c397c40d9 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.4.5", + "version": "1.4.6", "type": "module", "license": "MIT", "exports": { diff --git a/packages/slack/package.json b/packages/slack/package.json index 0d888f627..9239ac572 100644 --- a/packages/slack/package.json +++ b/packages/slack/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/slack", - "version": "1.4.5", + "version": "1.4.6", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/ui/package.json b/packages/ui/package.json index 197e3bbd5..e406ecf16 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/ui", - "version": "1.4.5", + "version": "1.4.6", "type": "module", "license": "MIT", "exports": { diff --git a/packages/util/package.json b/packages/util/package.json index 5d9ac521b..35aaa9b7c 100644 --- a/packages/util/package.json +++ b/packages/util/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/util", - "version": "1.4.5", + "version": "1.4.6", "private": true, "type": "module", "license": "MIT", diff --git a/packages/web/package.json b/packages/web/package.json index 7ebd7292e..5ca11ea29 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.4.5", + "version": "1.4.6", "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 20ce31dea..634583bd3 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.4.5", + "version": "1.4.6", "publisher": "sst-dev", "repository": { "type": "git", -- cgit v1.2.3 From d6b14e24678db678163c281257322c5a9bf0e6fa Mon Sep 17 00:00:00 2001 From: Kit Langton Date: Wed, 15 Apr 2026 21:56:23 -0400 Subject: fix: prefix 32 unused parameters with underscore (#22694) --- packages/console/app/src/component/icon.tsx | 4 ++-- packages/console/app/src/routes/auth/status.ts | 2 +- packages/console/app/src/routes/debug/index.ts | 2 +- .../routes/zen/util/provider/openai-compatible.ts | 2 +- packages/console/app/src/routes/zen/v1/models.ts | 2 +- .../console/app/src/routes/zen/v1/models/[model].ts | 4 ++-- packages/function/src/api.ts | 4 ++-- packages/opencode/src/agent/agent.ts | 2 +- .../src/cli/cmd/tui/component/dialog-mcp.tsx | 2 +- .../opencode/src/cli/cmd/tui/ui/dialog-confirm.tsx | 2 +- packages/opencode/src/config/config.ts | 2 +- packages/opencode/src/provider/schema.ts | 2 +- packages/opencode/src/provider/transform.ts | 2 +- packages/opencode/src/v2/session.ts | 4 ++-- packages/opencode/test/session/prompt-effect.test.ts | 20 ++++++++++---------- packages/opencode/test/session/retry.test.ts | 2 +- packages/plugin/src/example.ts | 2 +- 17 files changed, 30 insertions(+), 30 deletions(-) (limited to 'packages/function') diff --git a/packages/console/app/src/component/icon.tsx b/packages/console/app/src/component/icon.tsx index 4627c0084..da2e87ef4 100644 --- a/packages/console/app/src/component/icon.tsx +++ b/packages/console/app/src/component/icon.tsx @@ -1,6 +1,6 @@ import { JSX } from "solid-js" -export function IconZen(props: JSX.SvgSVGAttributes) { +export function IconZen(_props: JSX.SvgSVGAttributes) { return ( @@ -13,7 +13,7 @@ export function IconZen(props: JSX.SvgSVGAttributes) { ) } -export function IconGo(props: JSX.SvgSVGAttributes) { +export function IconGo(_props: JSX.SvgSVGAttributes) { return ( diff --git a/packages/console/app/src/routes/auth/status.ts b/packages/console/app/src/routes/auth/status.ts index 215cae698..ed522d740 100644 --- a/packages/console/app/src/routes/auth/status.ts +++ b/packages/console/app/src/routes/auth/status.ts @@ -1,7 +1,7 @@ import { APIEvent } from "@solidjs/start" import { useAuthSession } from "~/context/auth" -export async function GET(input: APIEvent) { +export async function GET(_input: APIEvent) { const session = await useAuthSession() return Response.json(session.data) } diff --git a/packages/console/app/src/routes/debug/index.ts b/packages/console/app/src/routes/debug/index.ts index 2bdd269e7..4bfb63394 100644 --- a/packages/console/app/src/routes/debug/index.ts +++ b/packages/console/app/src/routes/debug/index.ts @@ -3,7 +3,7 @@ import { json } from "@solidjs/router" import { Database } from "@opencode-ai/console-core/drizzle/index.js" import { UserTable } from "@opencode-ai/console-core/schema/user.sql.js" -export async function GET(evt: APIEvent) { +export async function GET(_evt: APIEvent) { return json({ data: await Database.use(async (tx) => { const result = await tx.$count(UserTable) diff --git a/packages/console/app/src/routes/zen/util/provider/openai-compatible.ts b/packages/console/app/src/routes/zen/util/provider/openai-compatible.ts index e05f0d6c0..97b0abc64 100644 --- a/packages/console/app/src/routes/zen/util/provider/openai-compatible.ts +++ b/packages/console/app/src/routes/zen/util/provider/openai-compatible.ts @@ -30,7 +30,7 @@ export const oaCompatHelper: ProviderHelper = ({ adjustCacheUsage, safetyIdentif headers.set("authorization", `Bearer ${apiKey}`) headers.set("x-session-affinity", headers.get("x-opencode-session") ?? "") }, - modifyBody: (body: Record, workspaceID?: string) => { + modifyBody: (body: Record, _workspaceID?: string) => { return { ...body, ...(body.stream ? { stream_options: { include_usage: true } } : {}), diff --git a/packages/console/app/src/routes/zen/v1/models.ts b/packages/console/app/src/routes/zen/v1/models.ts index d2592d20b..6b4a878fc 100644 --- a/packages/console/app/src/routes/zen/v1/models.ts +++ b/packages/console/app/src/routes/zen/v1/models.ts @@ -5,7 +5,7 @@ import { WorkspaceTable } from "@opencode-ai/console-core/schema/workspace.sql.j import { ModelTable } from "@opencode-ai/console-core/schema/model.sql.js" import { ZenData } from "@opencode-ai/console-core/model.js" -export async function OPTIONS(input: APIEvent) { +export async function OPTIONS(_input: APIEvent) { return new Response(null, { status: 200, headers: { diff --git a/packages/console/app/src/routes/zen/v1/models/[model].ts b/packages/console/app/src/routes/zen/v1/models/[model].ts index a4edd5861..bc1168eb0 100644 --- a/packages/console/app/src/routes/zen/v1/models/[model].ts +++ b/packages/console/app/src/routes/zen/v1/models/[model].ts @@ -6,8 +6,8 @@ export function POST(input: APIEvent) { format: "google", modelList: "full", parseApiKey: (headers: Headers) => headers.get("x-goog-api-key") ?? undefined, - parseModel: (url: string, body: any) => url.split("/").pop()?.split(":")?.[0] ?? "", - parseIsStream: (url: string, body: any) => + parseModel: (url: string, _body: any) => url.split("/").pop()?.split(":")?.[0] ?? "", + parseIsStream: (url: string, _body: any) => // ie. url: https://opencode.ai/zen/v1/models/gemini-3-pro:streamGenerateContent?alt=sse' url.split("/").pop()?.split(":")?.[1]?.startsWith("streamGenerateContent") ?? false, }) diff --git a/packages/function/src/api.ts b/packages/function/src/api.ts index 54b93ad71..d6565b287 100644 --- a/packages/function/src/api.ts +++ b/packages/function/src/api.ts @@ -49,9 +49,9 @@ export class SyncServer extends DurableObject { }) } - async webSocketMessage(ws, message) {} + async webSocketMessage(_ws, _message) {} - async webSocketClose(ws, code, reason, wasClean) { + async webSocketClose(ws, code, _reason, _wasClean) { ws.close(code, "Durable Object is closing WebSocket") } diff --git a/packages/opencode/src/agent/agent.ts b/packages/opencode/src/agent/agent.ts index 8e6bfe5e9..8d11a93b3 100644 --- a/packages/opencode/src/agent/agent.ts +++ b/packages/opencode/src/agent/agent.ts @@ -80,7 +80,7 @@ export namespace Agent { const provider = yield* Provider.Service const state = yield* InstanceState.make( - Effect.fn("Agent.state")(function* (ctx) { + Effect.fn("Agent.state")(function* (_ctx) { const cfg = yield* config.get() const skillDirs = yield* skill.dirs() const whitelistedDirs = [Truncate.GLOB, ...skillDirs.map((dir) => path.join(dir, "*"))] diff --git a/packages/opencode/src/cli/cmd/tui/component/dialog-mcp.tsx b/packages/opencode/src/cli/cmd/tui/component/dialog-mcp.tsx index 9cfa30d4d..173c5ff60 100644 --- a/packages/opencode/src/cli/cmd/tui/component/dialog-mcp.tsx +++ b/packages/opencode/src/cli/cmd/tui/component/dialog-mcp.tsx @@ -78,7 +78,7 @@ export function DialogMcp() { title="MCPs" options={options()} keybind={keybinds()} - onSelect={(option) => { + onSelect={(_option) => { // Don't close on select, only on escape }} /> diff --git a/packages/opencode/src/cli/cmd/tui/ui/dialog-confirm.tsx b/packages/opencode/src/cli/cmd/tui/ui/dialog-confirm.tsx index ef75764a2..48adddaed 100644 --- a/packages/opencode/src/cli/cmd/tui/ui/dialog-confirm.tsx +++ b/packages/opencode/src/cli/cmd/tui/ui/dialog-confirm.tsx @@ -54,7 +54,7 @@ export function DialogConfirm(props: DialogConfirmProps) { paddingLeft={1} paddingRight={1} backgroundColor={key === store.active ? theme.primary : undefined} - onMouseUp={(evt) => { + onMouseUp={(_evt) => { if (key === "confirm") props.onConfirm?.() if (key === "cancel") props.onCancel?.() dialog.clear() diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts index f35e8c83d..63e41f445 100644 --- a/packages/opencode/src/config/config.ts +++ b/packages/opencode/src/config/config.ts @@ -510,7 +510,7 @@ export const Agent = z permission: Permission.optional(), }) .catchall(z.any()) - .transform((agent, ctx) => { + .transform((agent, _ctx) => { const knownKeys = new Set([ "name", "model", diff --git a/packages/opencode/src/provider/schema.ts b/packages/opencode/src/provider/schema.ts index 4490ca289..702616018 100644 --- a/packages/opencode/src/provider/schema.ts +++ b/packages/opencode/src/provider/schema.ts @@ -30,7 +30,7 @@ const modelIdSchema = Schema.String.pipe(Schema.brand("ModelID")) export type ModelID = typeof modelIdSchema.Type export const ModelID = modelIdSchema.pipe( - withStatics((schema: typeof modelIdSchema) => ({ + withStatics((_schema: typeof modelIdSchema) => ({ zod: z.string().pipe(z.custom()), })), ) diff --git a/packages/opencode/src/provider/transform.ts b/packages/opencode/src/provider/transform.ts index 3138f8e29..7b83c245f 100644 --- a/packages/opencode/src/provider/transform.ts +++ b/packages/opencode/src/provider/transform.ts @@ -49,7 +49,7 @@ export namespace ProviderTransform { function normalizeMessages( msgs: ModelMessage[], model: Provider.Model, - options: Record, + _options: Record, ): ModelMessage[] { // Anthropic rejects messages with empty content - filter out empty string messages // and remove empty text/reasoning parts from array content diff --git a/packages/opencode/src/v2/session.ts b/packages/opencode/src/v2/session.ts index 97df0a220..ce1b39031 100644 --- a/packages/opencode/src/v2/session.ts +++ b/packages/opencode/src/v2/session.ts @@ -40,11 +40,11 @@ export namespace SessionV2 { Effect.gen(function* () { const session = yield* Session.Service - const create: Interface["create"] = Effect.fn("Session.create")(function* (input) { + const create: Interface["create"] = Effect.fn("Session.create")(function* (_input) { throw new Error("Not implemented") }) - const prompt: Interface["prompt"] = Effect.fn("Session.prompt")(function* (input) { + const prompt: Interface["prompt"] = Effect.fn("Session.prompt")(function* (_input) { throw new Error("Not implemented") }) diff --git a/packages/opencode/test/session/prompt-effect.test.ts b/packages/opencode/test/session/prompt-effect.test.ts index 91297aed1..7a118cb05 100644 --- a/packages/opencode/test/session/prompt-effect.test.ts +++ b/packages/opencode/test/session/prompt-effect.test.ts @@ -786,7 +786,7 @@ it.live( const { task } = yield* registry.named() const original = task.execute task.execute = (_args, ctx) => - Effect.callback((resume) => { + Effect.callback((_resume) => { ready.resolve() ctx.abort.addEventListener("abort", () => aborted.resolve(), { once: true }) return Effect.sync(() => aborted.resolve()) @@ -856,7 +856,7 @@ it.live( it.live("concurrent loop callers get same result", () => provideTmpdirInstance( - (dir) => + (_dir) => Effect.gen(function* () { const { prompt, run, chat } = yield* boot() yield* seed(chat.id, { finish: "stop" }) @@ -997,7 +997,7 @@ it.live( it.live("assertNotBusy succeeds when idle", () => provideTmpdirInstance( - (dir) => + (_dir) => Effect.gen(function* () { const run = yield* SessionRunState.Service const sessions = yield* Session.Service @@ -1042,7 +1042,7 @@ it.live( unix("shell captures stdout and stderr in completed tool output", () => provideTmpdirInstance( - (dir) => + (_dir) => Effect.gen(function* () { const { prompt, run, chat } = yield* boot() const result = yield* prompt.shell({ @@ -1117,7 +1117,7 @@ unix("shell lists files from the project directory", () => unix("shell captures stderr from a failing command", () => provideTmpdirInstance( - (dir) => + (_dir) => Effect.gen(function* () { const { prompt, run, chat } = yield* boot() const result = yield* prompt.shell({ @@ -1143,7 +1143,7 @@ unix( () => withSh(() => provideTmpdirInstance( - (dir) => + (_dir) => Effect.gen(function* () { const { prompt, chat } = yield* boot() @@ -1255,7 +1255,7 @@ unix( () => withSh(() => provideTmpdirInstance( - (dir) => + (_dir) => Effect.gen(function* () { const { prompt, run, chat } = yield* boot() @@ -1292,7 +1292,7 @@ unix( () => withSh(() => provideTmpdirInstance( - (dir) => + (_dir) => Effect.gen(function* () { const { prompt, chat } = yield* boot() @@ -1374,7 +1374,7 @@ unix( "cancel interrupts loop queued behind shell", () => provideTmpdirInstance( - (dir) => + (_dir) => Effect.gen(function* () { const { prompt, chat } = yield* boot() @@ -1403,7 +1403,7 @@ unix( () => withSh(() => provideTmpdirInstance( - (dir) => + (_dir) => Effect.gen(function* () { const { prompt, chat } = yield* boot() diff --git a/packages/opencode/test/session/retry.test.ts b/packages/opencode/test/session/retry.test.ts index 2d01a8f35..ade264786 100644 --- a/packages/opencode/test/session/retry.test.ts +++ b/packages/opencode/test/session/retry.test.ts @@ -239,7 +239,7 @@ describe("session.message-v2.fromError", () => { using server = Bun.serve({ port: 0, idleTimeout: 8, - async fetch(req) { + async fetch(_req) { return new Response( new ReadableStream({ async pull(controller) { diff --git a/packages/plugin/src/example.ts b/packages/plugin/src/example.ts index 1cf042fe9..9d7e178a9 100644 --- a/packages/plugin/src/example.ts +++ b/packages/plugin/src/example.ts @@ -1,7 +1,7 @@ import { Plugin } from "./index.js" import { tool } from "./tool.js" -export const ExamplePlugin: Plugin = async (ctx) => { +export const ExamplePlugin: Plugin = async (_ctx) => { return { tool: { mytool: tool({ -- cgit v1.2.3 From 34213d444681a8953c5693bd01dd754c4e79a30b Mon Sep 17 00:00:00 2001 From: Kit Langton Date: Wed, 15 Apr 2026 22:01:02 -0400 Subject: fix: delete 9 dead functions with zero callers (#22697) --- packages/app/src/context/global-sync/bootstrap.ts | 16 --------------- packages/function/src/api.ts | 14 ------------- packages/opencode/script/postinstall.mjs | 12 ----------- .../opencode/src/server/instance/httpapi/server.ts | 4 ---- packages/opencode/test/lib/llm-server.ts | 24 ---------------------- packages/opencode/test/session/compaction.test.ts | 19 ----------------- packages/ui/src/components/session-diff.ts | 14 ------------- .../src/components/timeline-playground.stories.tsx | 4 ---- 8 files changed, 107 deletions(-) (limited to 'packages/function') diff --git a/packages/app/src/context/global-sync/bootstrap.ts b/packages/app/src/context/global-sync/bootstrap.ts index ad987efa6..2f9147498 100644 --- a/packages/app/src/context/global-sync/bootstrap.ts +++ b/packages/app/src/context/global-sync/bootstrap.ts @@ -65,22 +65,6 @@ function runAll(list: Array<() => Promise>) { return Promise.allSettled(list.map((item) => item())) } -function showErrors(input: { - errors: unknown[] - title: string - translate: (key: string, vars?: Record) => string - formatMoreCount: (count: number) => string -}) { - if (input.errors.length === 0) return - const message = formatServerError(input.errors[0], input.translate) - const more = input.errors.length > 1 ? input.formatMoreCount(input.errors.length - 1) : "" - showToast({ - variant: "error", - title: input.title, - description: message + more, - }) -} - export async function bootstrapGlobal(input: { globalSDK: OpencodeClient requestFailedTitle: string diff --git a/packages/function/src/api.ts b/packages/function/src/api.ts index d6565b287..4d8b295ec 100644 --- a/packages/function/src/api.ts +++ b/packages/function/src/api.ts @@ -12,20 +12,6 @@ type Env = { WEB_DOMAIN: string } -async function getFeishuTenantToken(): Promise { - const response = await fetch("https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal", { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ - app_id: Resource.FEISHU_APP_ID.value, - app_secret: Resource.FEISHU_APP_SECRET.value, - }), - }) - const data = (await response.json()) as { tenant_access_token?: string } - if (!data.tenant_access_token) throw new Error("Failed to get Feishu tenant token") - return data.tenant_access_token -} - export class SyncServer extends DurableObject { constructor(ctx: DurableObjectState, env: Env) { super(ctx, env) diff --git a/packages/opencode/script/postinstall.mjs b/packages/opencode/script/postinstall.mjs index 98f23e16f..2b990251c 100644 --- a/packages/opencode/script/postinstall.mjs +++ b/packages/opencode/script/postinstall.mjs @@ -85,18 +85,6 @@ function prepareBinDirectory(binaryName) { return { binDir, targetPath } } -function symlinkBinary(sourcePath, binaryName) { - const { targetPath } = prepareBinDirectory(binaryName) - - fs.symlinkSync(sourcePath, targetPath) - console.log(`opencode binary symlinked: ${targetPath} -> ${sourcePath}`) - - // Verify the file exists after operation - if (!fs.existsSync(targetPath)) { - throw new Error(`Failed to symlink binary to ${targetPath}`) - } -} - async function main() { try { if (os.platform() === "win32") { diff --git a/packages/opencode/src/server/instance/httpapi/server.ts b/packages/opencode/src/server/instance/httpapi/server.ts index 363e93a24..54c3c57ff 100644 --- a/packages/opencode/src/server/instance/httpapi/server.ts +++ b/packages/opencode/src/server/instance/httpapi/server.ts @@ -26,10 +26,6 @@ const Headers = Schema.Struct({ }) export namespace ExperimentalHttpApiServer { - function text(input: string, status: number, headers?: Record) { - return HttpServerResponse.text(input, { status, headers }) - } - function decode(input: string) { try { return decodeURIComponent(input) diff --git a/packages/opencode/test/lib/llm-server.ts b/packages/opencode/test/lib/llm-server.ts index 2e2a2ea89..1f873a9fb 100644 --- a/packages/opencode/test/lib/llm-server.ts +++ b/packages/opencode/test/lib/llm-server.ts @@ -596,35 +596,11 @@ function hit(url: string, body: unknown) { } satisfies Hit } -/** Auto-acknowledging tool-result follow-ups avoids requiring tests to queue two responses per tool call. */ -function isToolResultFollowUp(body: unknown): boolean { - if (!body || typeof body !== "object") return false - // OpenAI chat format: last message has role "tool" - if ("messages" in body && Array.isArray(body.messages)) { - const last = body.messages[body.messages.length - 1] - return last?.role === "tool" - } - // Responses API: input contains function_call_output - if ("input" in body && Array.isArray(body.input)) { - return body.input.some((item: Record) => item?.type === "function_call_output") - } - return false -} - function isTitleRequest(body: unknown): boolean { if (!body || typeof body !== "object") return false return JSON.stringify(body).includes("Generate a title for this conversation") } -function requestSummary(body: unknown): string { - if (!body || typeof body !== "object") return "empty body" - if ("messages" in body && Array.isArray(body.messages)) { - const roles = body.messages.map((m: Record) => m.role).join(",") - return `messages=[${roles}]` - } - return `keys=[${Object.keys(body).join(",")}]` -} - namespace TestLLMServer { export interface Service { readonly url: string diff --git a/packages/opencode/test/session/compaction.test.ts b/packages/opencode/test/session/compaction.test.ts index d658f48bd..7711d3193 100644 --- a/packages/opencode/test/session/compaction.test.ts +++ b/packages/opencode/test/session/compaction.test.ts @@ -143,25 +143,6 @@ async function assistant(sessionID: SessionID, parentID: MessageID, root: string return msg } -async function tool(sessionID: SessionID, messageID: MessageID, tool: string, output: string) { - return svc.updatePart({ - id: PartID.ascending(), - messageID, - sessionID, - type: "tool", - callID: crypto.randomUUID(), - tool, - state: { - status: "completed", - input: {}, - output, - title: "done", - metadata: {}, - time: { start: Date.now(), end: Date.now() }, - }, - }) -} - function fake( input: Parameters[0], result: "continue" | "compact", diff --git a/packages/ui/src/components/session-diff.ts b/packages/ui/src/components/session-diff.ts index d791c7fc1..a5fbdbc5c 100644 --- a/packages/ui/src/components/session-diff.ts +++ b/packages/ui/src/components/session-diff.ts @@ -25,20 +25,6 @@ export type ViewDiff = { const cache = new Map() -function empty(file: string, key: string) { - return { - name: file, - type: "change", - hunks: [], - splitLineCount: 0, - unifiedLineCount: 0, - isPartial: true, - deletionLines: [], - additionLines: [], - cacheKey: key, - } satisfies FileDiffMetadata -} - function patch(diff: ReviewDiff) { if (typeof diff.patch === "string") { const [patch] = parsePatch(diff.patch) diff --git a/packages/ui/src/components/timeline-playground.stories.tsx b/packages/ui/src/components/timeline-playground.stories.tsx index 282592ff6..fa3e7ff79 100644 --- a/packages/ui/src/components/timeline-playground.stories.tsx +++ b/packages/ui/src/components/timeline-playground.stories.tsx @@ -555,10 +555,6 @@ function toolPart(sample: (typeof TOOL_SAMPLES)[keyof typeof TOOL_SAMPLES], stat } as ToolPart } -function compactionPart(): CompactionPart { - return { id: uid(), type: "compaction", auto: true } as CompactionPart -} - // --------------------------------------------------------------------------- // CSS Controls definition // --------------------------------------------------------------------------- -- cgit v1.2.3 From cce05c16658a39d091f658bdb53dcce1e88c66d0 Mon Sep 17 00:00:00 2001 From: Kit Langton Date: Wed, 15 Apr 2026 22:01:53 -0400 Subject: fix: clean up 49 unused variables, catch params, and stale imports (#22695) --- infra/enterprise.ts | 2 +- packages/app/src/addons/serialize.test.ts | 4 ++-- packages/app/src/app.tsx | 7 +----- packages/app/src/pages/session.tsx | 3 --- packages/app/src/pages/session/file-tabs.tsx | 6 ----- packages/console/app/script/generate-sitemap.ts | 1 - packages/console/app/src/routes/index.tsx | 2 -- packages/console/app/src/routes/user-menu.tsx | 2 +- packages/function/src/api.ts | 2 +- packages/opencode/src/bus/bus.ts | 1 - .../cli/cmd/tui/component/prompt/autocomplete.tsx | 2 +- .../src/cli/cmd/tui/routes/session/index.tsx | 4 ++-- .../src/cli/cmd/tui/routes/session/permission.tsx | 2 +- .../cli/cmd/tui/routes/session/subagent-footer.tsx | 2 +- packages/opencode/src/cli/network.ts | 2 -- packages/opencode/src/command/index.ts | 3 --- packages/opencode/src/config/config.ts | 2 +- packages/opencode/src/control-plane/workspace.ts | 4 ++-- packages/opencode/src/mcp/oauth-callback.ts | 2 +- packages/opencode/src/server/fence.ts | 2 +- .../opencode/src/server/instance/middleware.ts | 2 -- packages/opencode/src/server/instance/provider.ts | 3 --- packages/opencode/src/session/prompt.ts | 2 +- packages/opencode/src/tool/registry.ts | 2 +- packages/opencode/test/file/index.test.ts | 2 +- .../opencode/test/fixture/lsp/fake-lsp-server.js | 2 -- packages/opencode/test/provider/transform.test.ts | 2 -- packages/opencode/test/server/session-list.test.ts | 2 +- packages/opencode/test/session/llm.test.ts | 1 - .../test/session/messages-pagination.test.ts | 8 +++---- packages/sdk/js/src/v2/data.ts | 2 +- packages/shared/test/filesystem/filesystem.test.ts | 4 ++-- .../shared/test/fixture/effect-flock-worker.ts | 1 - packages/slack/src/index.ts | 2 +- script/publish.ts | 28 ---------------------- script/stats.ts | 2 +- sdks/vscode/src/extension.ts | 6 ++--- 37 files changed, 32 insertions(+), 94 deletions(-) (limited to 'packages/function') diff --git a/infra/enterprise.ts b/infra/enterprise.ts index 38f0c3c8f..dc336a684 100644 --- a/infra/enterprise.ts +++ b/infra/enterprise.ts @@ -3,7 +3,7 @@ import { shortDomain } from "./stage" const storage = new sst.cloudflare.Bucket("EnterpriseStorage") -const teams = new sst.cloudflare.x.SolidStart("Teams", { +new sst.cloudflare.x.SolidStart("Teams", { domain: shortDomain, path: "packages/enterprise", buildCommand: "bun run build:cloudflare", diff --git a/packages/app/src/addons/serialize.test.ts b/packages/app/src/addons/serialize.test.ts index 7f6780557..6828e60f8 100644 --- a/packages/app/src/addons/serialize.test.ts +++ b/packages/app/src/addons/serialize.test.ts @@ -180,8 +180,8 @@ describe("SerializeAddon", () => { await writeAndWait(term, input) const origLine = term.buffer.active.getLine(0) - const origFg = origLine!.getCell(0)!.getFgColor() - const origBg = origLine!.getCell(0)!.getBgColor() + const _origFg = origLine!.getCell(0)!.getFgColor() + const _origBg = origLine!.getCell(0)!.getBgColor() expect(origLine!.getCell(0)!.isBold()).toBe(1) const serialized = addon.serialize({ range: { start: 0, end: 0 } }) diff --git a/packages/app/src/app.tsx b/packages/app/src/app.tsx index 35fd36cca..9983548ba 100644 --- a/packages/app/src/app.tsx +++ b/packages/app/src/app.tsx @@ -10,7 +10,7 @@ import { ThemeProvider } from "@opencode-ai/ui/theme/context" import { MetaProvider } from "@solidjs/meta" import { type BaseRouterProps, Navigate, Route, Router } from "@solidjs/router" import { QueryClient, QueryClientProvider } from "@tanstack/solid-query" -import { type Duration, Effect } from "effect" +import { Effect } from "effect" import { type Component, createMemo, @@ -156,11 +156,6 @@ export function AppBaseProviders(props: ParentProps<{ locale?: Locale }>) { ) } -const effectMinDuration = - (duration: Duration.Input) => - (e: Effect.Effect) => - Effect.all([e, Effect.sleep(duration)], { concurrency: "unbounded" }).pipe(Effect.map((v) => v[0])) - function ConnectionGate(props: ParentProps<{ disableHealthCheck?: boolean }>) { const server = useServer() const checkServerHealth = useCheckServerHealth() diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx index e328e3f0c..32df997f7 100644 --- a/packages/app/src/pages/session.tsx +++ b/packages/app/src/pages/session.tsx @@ -433,7 +433,6 @@ export default function Page() { const isChildSession = createMemo(() => !!info()?.parentID) const diffs = createMemo(() => (params.id ? list(sync.data.session_diff[params.id]) : [])) const sessionCount = createMemo(() => Math.max(info()?.summary?.files ?? 0, diffs().length)) - const hasSessionReview = createMemo(() => sessionCount() > 0) const canReview = createMemo(() => !!sync.project) const reviewTab = createMemo(() => isDesktop()) const tabState = createSessionTabs({ @@ -443,8 +442,6 @@ export default function Page() { review: reviewTab, hasReview: canReview, }) - const contextOpen = tabState.contextOpen - const openedTabs = tabState.openedTabs const activeTab = tabState.activeTab const activeFileTab = tabState.activeFileTab const revertMessageID = createMemo(() => info()?.revert?.messageID) diff --git a/packages/app/src/pages/session/file-tabs.tsx b/packages/app/src/pages/session/file-tabs.tsx index a64dff64e..37bffcd2f 100644 --- a/packages/app/src/pages/session/file-tabs.tsx +++ b/packages/app/src/pages/session/file-tabs.tsx @@ -378,12 +378,6 @@ export function FileTabContent(props: { tab: string }) { requestAnimationFrame(() => comments.clearFocus()) }) - const cancelCommenting = () => { - const p = path() - if (p) file.setSelectedLines(p, null) - setNote("commenting", null) - } - let prev = { loaded: false, ready: false, diff --git a/packages/console/app/script/generate-sitemap.ts b/packages/console/app/script/generate-sitemap.ts index 89bca6bac..9fd3ba0f0 100755 --- a/packages/console/app/script/generate-sitemap.ts +++ b/packages/console/app/script/generate-sitemap.ts @@ -8,7 +8,6 @@ import { LOCALES, route } from "../src/lib/language.js" const __dirname = dirname(fileURLToPath(import.meta.url)) const BASE_URL = config.baseUrl const PUBLIC_DIR = join(__dirname, "../public") -const ROUTES_DIR = join(__dirname, "../src/routes") const DOCS_DIR = join(__dirname, "../../../web/src/content/docs") interface SitemapEntry { diff --git a/packages/console/app/src/routes/index.tsx b/packages/console/app/src/routes/index.tsx index e47134d2b..b5b12a84b 100644 --- a/packages/console/app/src/routes/index.tsx +++ b/packages/console/app/src/routes/index.tsx @@ -31,8 +31,6 @@ export default function Home() { const i18n = useI18n() const language = useLanguage() const githubData = createAsync(() => github()) - const release = createMemo(() => githubData()?.release) - const handleCopyClick = (event: Event) => { const button = event.currentTarget as HTMLButtonElement const text = button.textContent diff --git a/packages/console/app/src/routes/user-menu.tsx b/packages/console/app/src/routes/user-menu.tsx index fa1c1f60b..7b305d8ea 100644 --- a/packages/console/app/src/routes/user-menu.tsx +++ b/packages/console/app/src/routes/user-menu.tsx @@ -6,7 +6,7 @@ import { useI18n } from "~/context/i18n" import { useLanguage } from "~/context/language" import "./user-menu.css" -const logout = action(async () => { +const _logout = action(async () => { "use server" const auth = await useAuthSession() const event = getRequestEvent() diff --git a/packages/function/src/api.ts b/packages/function/src/api.ts index 4d8b295ec..68b2d450b 100644 --- a/packages/function/src/api.ts +++ b/packages/function/src/api.ts @@ -181,7 +181,7 @@ export default new Hono<{ Bindings: Env }>() let info const messages: Record = {} data.forEach((d) => { - const [root, type, ...splits] = d.key.split("/") + const [root, type] = d.key.split("/") if (root !== "session") return if (type === "info") { info = d.content diff --git a/packages/opencode/src/bus/bus.ts b/packages/opencode/src/bus/bus.ts index c5e31e6c2..fe9169171 100644 --- a/packages/opencode/src/bus/bus.ts +++ b/packages/opencode/src/bus/bus.ts @@ -4,7 +4,6 @@ import { EffectBridge } from "@/effect/bridge" import { Log } from "../util/log" import { BusEvent } from "./bus-event" import { GlobalBus } from "./global" -import { WorkspaceContext } from "@/control-plane/workspace-context" import { InstanceState } from "@/effect/instance-state" import { makeRuntime } from "@/effect/run-service" diff --git a/packages/opencode/src/cli/cmd/tui/component/prompt/autocomplete.tsx b/packages/opencode/src/cli/cmd/tui/component/prompt/autocomplete.tsx index 2118fe98e..7ca73310b 100644 --- a/packages/opencode/src/cli/cmd/tui/component/prompt/autocomplete.tsx +++ b/packages/opencode/src/cli/cmd/tui/component/prompt/autocomplete.tsx @@ -111,7 +111,7 @@ export function Autocomplete(props: { const position = createMemo(() => { if (!store.visible) return { x: 0, y: 0, width: 0 } - const dims = dimensions() + dimensions() positionTick() const anchor = props.anchor() const parent = anchor.parent diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx index f9fd5a9b9..9f0dfa603 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx @@ -157,10 +157,10 @@ export function Session() { const [showThinking, setShowThinking] = kv.signal("thinking_visibility", true) const [timestamps, setTimestamps] = kv.signal<"hide" | "show">("timestamps", "hide") const [showDetails, setShowDetails] = kv.signal("tool_details_visibility", true) - const [showAssistantMetadata, setShowAssistantMetadata] = kv.signal("assistant_metadata_visibility", true) + const [showAssistantMetadata, _setShowAssistantMetadata] = kv.signal("assistant_metadata_visibility", true) const [showScrollbar, setShowScrollbar] = kv.signal("scrollbar_visible", false) const [diffWrapMode] = kv.signal<"word" | "none">("diff_wrap_mode", "word") - const [animationsEnabled, setAnimationsEnabled] = kv.signal("animations_enabled", true) + const [_animationsEnabled, _setAnimationsEnabled] = kv.signal("animations_enabled", true) const [showGenericToolOutput, setShowGenericToolOutput] = kv.signal("generic_tool_output_visibility", false) const wide = createMemo(() => dimensions().width > 120) diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/permission.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/permission.tsx index e0b5002b6..ad824fe48 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/permission.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/permission.tsx @@ -599,7 +599,7 @@ function Prompt>(props: { }) const hint = createMemo(() => (store.expanded ? "minimize" : "fullscreen")) - const renderer = useRenderer() + useRenderer() const content = () => ( (null) - const dimensions = useTerminalDimensions() + useTerminalDimensions() return ( diff --git a/packages/opencode/src/cli/network.ts b/packages/opencode/src/cli/network.ts index 6321c056d..ea281aafb 100644 --- a/packages/opencode/src/cli/network.ts +++ b/packages/opencode/src/cli/network.ts @@ -43,8 +43,6 @@ export async function resolveNetworkOptions(args: NetworkOptions) { const hostnameExplicitlySet = process.argv.includes("--hostname") const mdnsExplicitlySet = process.argv.includes("--mdns") const mdnsDomainExplicitlySet = process.argv.includes("--mdns-domain") - const corsExplicitlySet = process.argv.includes("--cors") - const mdns = mdnsExplicitlySet ? args.mdns : (config?.server?.mdns ?? args.mdns) const mdnsDomain = mdnsDomainExplicitlySet ? args["mdns-domain"] : (config?.server?.mdnsDomain ?? args["mdns-domain"]) const port = portExplicitlySet ? args.port : (config?.server?.port ?? args.port) diff --git a/packages/opencode/src/command/index.ts b/packages/opencode/src/command/index.ts index 28fb37f27..539ae0dac 100644 --- a/packages/opencode/src/command/index.ts +++ b/packages/opencode/src/command/index.ts @@ -8,13 +8,10 @@ import z from "zod" import { Config } from "../config" import { MCP } from "../mcp" import { Skill } from "../skill" -import { Log } from "../util/log" import PROMPT_INITIALIZE from "./template/initialize.txt" import PROMPT_REVIEW from "./template/review.txt" export namespace Command { - const log = Log.create({ service: "command" }) - type State = { commands: Record } diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts index 63e41f445..58d9343ad 100644 --- a/packages/opencode/src/config/config.ts +++ b/packages/opencode/src/config/config.ts @@ -1095,7 +1095,7 @@ function patchJsonc(input: string, patch: unknown, path: string[] = []): string } function writable(info: Info) { - const { plugin_origins, ...next } = info + const { plugin_origins: _plugin_origins, ...next } = info return next } diff --git a/packages/opencode/src/control-plane/workspace.ts b/packages/opencode/src/control-plane/workspace.ts index 67583107f..4fef4f932 100644 --- a/packages/opencode/src/control-plane/workspace.ts +++ b/packages/opencode/src/control-plane/workspace.ts @@ -328,7 +328,7 @@ export namespace Workspace { try { const adaptor = await getAdaptor(info.projectID, row.type) await adaptor.remove(info) - } catch (err) { + } catch { log.error("adaptor not available when removing workspace", { type: row.type }) } Database.use((db) => db.delete(WorkspaceTable).where(eq(WorkspaceTable.id, id)).run()) @@ -404,7 +404,7 @@ export namespace Workspace { return synced(state) }, }) - } catch (error) { + } catch { if (signal?.aborted) throw signal.reason ?? new Error("Request aborted") throw new Error(`Timed out waiting for sync fence: ${JSON.stringify(state)}`) } diff --git a/packages/opencode/src/mcp/oauth-callback.ts b/packages/opencode/src/mcp/oauth-callback.ts index b5b6a7a6e..6babccd77 100644 --- a/packages/opencode/src/mcp/oauth-callback.ts +++ b/packages/opencode/src/mcp/oauth-callback.ts @@ -218,7 +218,7 @@ export namespace McpOAuthCallback { log.info("oauth callback server stopped") } - for (const [name, pending] of pendingAuths) { + for (const [_name, pending] of pendingAuths) { clearTimeout(pending.timeout) pending.reject(new Error("OAuth callback server stopped")) } diff --git a/packages/opencode/src/server/fence.ts b/packages/opencode/src/server/fence.ts index bb41bd7a4..b6dbde008 100644 --- a/packages/opencode/src/server/fence.ts +++ b/packages/opencode/src/server/fence.ts @@ -40,7 +40,7 @@ export function parse(headers: Headers) { try { data = JSON.parse(raw) - } catch (err) { + } catch { return } diff --git a/packages/opencode/src/server/instance/middleware.ts b/packages/opencode/src/server/instance/middleware.ts index 0e29daa9e..5fd1fc25e 100644 --- a/packages/opencode/src/server/instance/middleware.ts +++ b/packages/opencode/src/server/instance/middleware.ts @@ -16,8 +16,6 @@ import { AppFileSystem } from "@opencode-ai/shared/filesystem" type Rule = { method?: string; path: string; exact?: boolean; action: "local" | "forward" } -const OPENCODE_WORKSPACE = process.env.OPENCODE_WORKSPACE - const RULES: Array = [ { path: "/session/status", action: "forward" }, { method: "GET", path: "/session", action: "local" }, diff --git a/packages/opencode/src/server/instance/provider.ts b/packages/opencode/src/server/instance/provider.ts index 8018dfbea..bbde4c955 100644 --- a/packages/opencode/src/server/instance/provider.ts +++ b/packages/opencode/src/server/instance/provider.ts @@ -10,11 +10,8 @@ import { AppRuntime } from "../../effect/app-runtime" import { mapValues } from "remeda" import { errors } from "../error" import { lazy } from "../../util/lazy" -import { Log } from "../../util/log" import { Effect } from "effect" -const log = Log.create({ service: "server" }) - export const ProviderRoutes = lazy(() => new Hono() .get( diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index 4e10fdf2d..b69967689 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -1825,7 +1825,7 @@ NOTE: At any point in time through this workflow you should feel free to ask the onSuccess: (output: unknown) => void }): AITool { // Remove $schema property if present (not needed for tool input) - const { $schema, ...toolSchema } = input.schema + const { $schema: _, ...toolSchema } = input.schema return tool({ id: "StructuredOutput" as any, diff --git a/packages/opencode/src/tool/registry.ts b/packages/opencode/src/tool/registry.ts index ef55758a5..b9870d194 100644 --- a/packages/opencode/src/tool/registry.ts +++ b/packages/opencode/src/tool/registry.ts @@ -176,7 +176,7 @@ export namespace ToolRegistry { } } - const cfg = yield* config.get() + yield* config.get() const questionEnabled = ["app", "cli", "desktop"].includes(Flag.OPENCODE_CLIENT) || Flag.OPENCODE_ENABLE_QUESTION_TOOL diff --git a/packages/opencode/test/file/index.test.ts b/packages/opencode/test/file/index.test.ts index d8203ac12..877e2ae0a 100644 --- a/packages/opencode/test/file/index.test.ts +++ b/packages/opencode/test/file/index.test.ts @@ -276,7 +276,7 @@ describe("file/index Filesystem patterns", () => { test("returns empty array buffer on error for images", async () => { await using tmp = await tmpdir() - const filepath = path.join(tmp.path, "broken.png") + const _filepath = path.join(tmp.path, "broken.png") // Don't create the file await Instance.provide({ diff --git a/packages/opencode/test/fixture/lsp/fake-lsp-server.js b/packages/opencode/test/fixture/lsp/fake-lsp-server.js index 39e578801..be62f96f3 100644 --- a/packages/opencode/test/fixture/lsp/fake-lsp-server.js +++ b/packages/opencode/test/fixture/lsp/fake-lsp-server.js @@ -1,8 +1,6 @@ // Simple JSON-RPC 2.0 LSP-like fake server over stdio // Implements a minimal LSP handshake and triggers a request upon notification -const net = require("net") - let nextId = 1 function encode(message) { diff --git a/packages/opencode/test/provider/transform.test.ts b/packages/opencode/test/provider/transform.test.ts index 4952a126b..0e0810d0e 100644 --- a/packages/opencode/test/provider/transform.test.ts +++ b/packages/opencode/test/provider/transform.test.ts @@ -2,8 +2,6 @@ import { describe, expect, test } from "bun:test" import { ProviderTransform } from "../../src/provider/transform" import { ModelID, ProviderID } from "../../src/provider/schema" -const OUTPUT_TOKEN_MAX = 32000 - describe("ProviderTransform.options - setCacheKey", () => { const sessionID = "test-session-123" diff --git a/packages/opencode/test/server/session-list.test.ts b/packages/opencode/test/server/session-list.test.ts index 8c86dc2f0..75adb7f9f 100644 --- a/packages/opencode/test/server/session-list.test.ts +++ b/packages/opencode/test/server/session-list.test.ts @@ -67,7 +67,7 @@ describe("session.list", () => { await Instance.provide({ directory: tmp.path, fn: async () => { - const session = await svc.create({ title: "new-session" }) + await svc.create({ title: "new-session" }) const futureStart = Date.now() + 86400000 const sessions = [...svc.list({ start: futureStart })] diff --git a/packages/opencode/test/session/llm.test.ts b/packages/opencode/test/session/llm.test.ts index e908545d4..f25ecc356 100644 --- a/packages/opencode/test/session/llm.test.ts +++ b/packages/opencode/test/session/llm.test.ts @@ -1181,7 +1181,6 @@ describe("session.llm.stream", () => { const providerID = "google" const modelID = "gemini-2.5-flash" const fixture = await loadFixture(providerID, modelID) - const provider = fixture.provider const model = fixture.model const pathSuffix = `/v1beta/models/${model.id}:streamGenerateContent` diff --git a/packages/opencode/test/session/messages-pagination.test.ts b/packages/opencode/test/session/messages-pagination.test.ts index 668918ec8..f728bd364 100644 --- a/packages/opencode/test/session/messages-pagination.test.ts +++ b/packages/opencode/test/session/messages-pagination.test.ts @@ -724,7 +724,7 @@ describe("MessageV2.filterCompacted", () => { const u1 = await addUser(session.id, "hello") await addCompactionPart(session.id, u1) - const u2 = await addUser(session.id, "world") + await addUser(session.id, "world") const result = MessageV2.filterCompacted(MessageV2.stream(session.id)) expect(result).toHaveLength(2) @@ -748,7 +748,7 @@ describe("MessageV2.filterCompacted", () => { isRetryable: true, }).toObject() as MessageV2.Assistant["error"] await addAssistant(session.id, u1, { summary: true, finish: "end_turn", error }) - const u2 = await addUser(session.id, "retry") + await addUser(session.id, "retry") const result = MessageV2.filterCompacted(MessageV2.stream(session.id)) // Error assistant doesn't add to completed, so compaction boundary never triggers @@ -770,7 +770,7 @@ describe("MessageV2.filterCompacted", () => { // summary=true but no finish await addAssistant(session.id, u1, { summary: true }) - const u2 = await addUser(session.id, "next") + await addUser(session.id, "next") const result = MessageV2.filterCompacted(MessageV2.stream(session.id)) expect(result).toHaveLength(3) @@ -892,7 +892,7 @@ describe("MessageV2 consistency", () => { directory: root, fn: async () => { const session = await svc.create({}) - const ids = await fill(session.id, 4) + await fill(session.id, 4) const filtered = MessageV2.filterCompacted(MessageV2.stream(session.id)) const all = Array.from(MessageV2.stream(session.id)).reverse() diff --git a/packages/sdk/js/src/v2/data.ts b/packages/sdk/js/src/v2/data.ts index baae6f278..776b168ad 100644 --- a/packages/sdk/js/src/v2/data.ts +++ b/packages/sdk/js/src/v2/data.ts @@ -5,7 +5,7 @@ export const message = { info: UserMessage parts: Part[] } { - const { parts, ...rest } = input + const { parts: _parts, ...rest } = input const info: UserMessage = { ...rest, diff --git a/packages/shared/test/filesystem/filesystem.test.ts b/packages/shared/test/filesystem/filesystem.test.ts index ce990d379..b49026bcb 100644 --- a/packages/shared/test/filesystem/filesystem.test.ts +++ b/packages/shared/test/filesystem/filesystem.test.ts @@ -290,7 +290,7 @@ describe("AppFileSystem", () => { it( "exists works", Effect.gen(function* () { - const fs = yield* AppFileSystem.Service + yield* AppFileSystem.Service const filesys = yield* FileSystem.FileSystem const tmp = yield* filesys.makeTempDirectoryScoped() const file = path.join(tmp, "exists.txt") @@ -304,7 +304,7 @@ describe("AppFileSystem", () => { it( "remove works", Effect.gen(function* () { - const fs = yield* AppFileSystem.Service + yield* AppFileSystem.Service const filesys = yield* FileSystem.FileSystem const tmp = yield* filesys.makeTempDirectoryScoped() const file = path.join(tmp, "delete-me.txt") diff --git a/packages/shared/test/fixture/effect-flock-worker.ts b/packages/shared/test/fixture/effect-flock-worker.ts index 7fd2e144a..c9116c2d5 100644 --- a/packages/shared/test/fixture/effect-flock-worker.ts +++ b/packages/shared/test/fixture/effect-flock-worker.ts @@ -1,5 +1,4 @@ import fs from "fs/promises" -import path from "path" import os from "os" import { Effect, Layer } from "effect" import { AppFileSystem } from "@opencode-ai/shared/filesystem" diff --git a/packages/slack/src/index.ts b/packages/slack/src/index.ts index 123710aa4..85d685129 100644 --- a/packages/slack/src/index.ts +++ b/packages/slack/src/index.ts @@ -27,7 +27,7 @@ const sessions = new Map tags -- Highlights with the same source attribute get grouped together ---> - - - -` - console.log("=== publishing ===\n") const pkgjsons = await Array.fromAsync( diff --git a/script/stats.ts b/script/stats.ts index 318b590af..9201e26e4 100755 --- a/script/stats.ts +++ b/script/stats.ts @@ -193,7 +193,7 @@ console.log("Fetching GitHub releases for anomalyco/opencode...\n") const releases = await fetchReleases() console.log(`\nFetched ${releases.length} releases total\n`) -const { total: githubTotal, stats } = calculate(releases) +const { total: githubTotal } = calculate(releases) console.log("Fetching npm all-time downloads for opencode-ai...\n") const npmDownloads = await fetchNpmDownloads("opencode-ai") diff --git a/sdks/vscode/src/extension.ts b/sdks/vscode/src/extension.ts index 772da9cc2..693e7267e 100644 --- a/sdks/vscode/src/extension.ts +++ b/sdks/vscode/src/extension.ts @@ -6,11 +6,11 @@ import * as vscode from "vscode" const TERMINAL_NAME = "opencode" export function activate(context: vscode.ExtensionContext) { - let openNewTerminalDisposable = vscode.commands.registerCommand("opencode.openNewTerminal", async () => { + const openNewTerminalDisposable = vscode.commands.registerCommand("opencode.openNewTerminal", async () => { await openTerminal() }) - let openTerminalDisposable = vscode.commands.registerCommand("opencode.openTerminal", async () => { + const openTerminalDisposable = vscode.commands.registerCommand("opencode.openTerminal", async () => { // An opencode terminal already exists => focus it const existingTerminal = vscode.window.terminals.find((t) => t.name === TERMINAL_NAME) if (existingTerminal) { @@ -40,7 +40,7 @@ export function activate(context: vscode.ExtensionContext) { } }) - context.subscriptions.push(openTerminalDisposable, addFilepathDisposable) + context.subscriptions.push(openNewTerminalDisposable, openTerminalDisposable, addFilepathDisposable) async function openTerminal() { // Create a new terminal in split screen -- cgit v1.2.3 From 702f7412676deae8317213a56a3b32095dba5aa4 Mon Sep 17 00:00:00 2001 From: Kit Langton Date: Wed, 15 Apr 2026 22:53:10 -0400 Subject: feat: enable oxlint suspicious category, fix 24 violations (#22727) --- .oxlintrc.json | 22 +++++++++++++++++++++- github/index.ts | 4 ++-- packages/app/src/context/global-sdk.tsx | 1 + packages/app/src/utils/runtime-adapters.test.ts | 2 ++ .../workspace/[id]/billing/reload-section.tsx | 2 +- packages/desktop-electron/src/main/apps.ts | 2 +- packages/function/src/api.ts | 1 + packages/opencode/script/postinstall.mjs | 2 +- packages/opencode/src/bus/bus-event.ts | 2 +- packages/opencode/src/cli/cmd/debug/agent.ts | 1 + packages/opencode/src/cli/cmd/github.ts | 3 ++- packages/opencode/src/cli/cmd/web.ts | 2 +- packages/opencode/src/patch/patch.ts | 2 +- packages/opencode/src/server/instance/tui.ts | 2 +- packages/opencode/src/session/prompt.ts | 3 +-- packages/opencode/src/sync/sync-event.ts | 2 +- packages/opencode/src/tool/read.ts | 2 +- packages/opencode/src/tool/tool.ts | 2 +- packages/opencode/test/mcp/lifecycle.test.ts | 3 +++ packages/opencode/test/session/prompt.test.ts | 11 +++++------ 20 files changed, 49 insertions(+), 22 deletions(-) (limited to 'packages/function') diff --git a/.oxlintrc.json b/.oxlintrc.json index c366084ee..37d91f425 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -1,5 +1,8 @@ { "$schema": "https://raw.githubusercontent.com/nicolo-ribaudo/oxc-project.github.io/refs/heads/json-schema/src/public/.oxlintrc.schema.json", + "categories": { + "suspicious": "warn" + }, "rules": { // Effect uses `function*` with Effect.gen/Effect.fnUntraced that don't always yield "require-yield": "off", @@ -10,7 +13,24 @@ // Intentional control char matching (ANSI escapes, null byte sanitization) "no-control-regex": "off", // SST and plugin tools require triple-slash references - "triple-slash-reference": "off" + "triple-slash-reference": "off", + + // Suspicious category: suppress noisy rules + // Effect's nested function* closures inherently shadow outer scope + "no-shadow": "off", + // Namespace-heavy codebase makes this too noisy + "unicorn/consistent-function-scoping": "off", + // Opinionated — .sort()/.reverse() mutation is fine in this codebase + "unicorn/no-array-sort": "off", + "unicorn/no-array-reverse": "off", + // Not relevant — this isn't a DOM event handler codebase + "unicorn/prefer-add-event-listener": "off", + // Bundler handles module resolution + "unicorn/require-module-specifiers": "off", + // postMessage target origin not relevant for this codebase + "unicorn/require-post-message-target-origin": "off", + // Side-effectful constructors are intentional in some places + "no-new": "off" }, "ignorePatterns": ["**/node_modules", "**/dist", "**/.build", "**/.sst", "**/*.d.ts"] } diff --git a/github/index.ts b/github/index.ts index be8e5aafc..4463aa200 100644 --- a/github/index.ts +++ b/github/index.ts @@ -542,7 +542,7 @@ async function subscribeSessionEvents() { ? JSON.stringify(part.state.input) : "Unknown" console.log() - console.log(color + `|`, "\x1b[0m\x1b[2m" + ` ${tool.padEnd(7, " ")}`, "", "\x1b[0m" + title) + console.log(`${color}|`, `\x1b[0m\x1b[2m ${tool.padEnd(7, " ")}`, "", `\x1b[0m${title}`) } if (part.type === "text") { @@ -776,7 +776,7 @@ async function assertPermissions() { console.log(` permission: ${permission}`) } catch (error) { console.error(`Failed to check permissions: ${error}`) - throw new Error(`Failed to check permissions for user ${actor}: ${error}`) + throw new Error(`Failed to check permissions for user ${actor}: ${error}`, { cause: error }) } if (!["admin", "write"].includes(permission)) throw new Error(`User ${actor} does not have write permissions`) diff --git a/packages/app/src/context/global-sdk.tsx b/packages/app/src/context/global-sdk.tsx index 172b5c966..e53d60d5a 100644 --- a/packages/app/src/context/global-sdk.tsx +++ b/packages/app/src/context/global-sdk.tsx @@ -128,6 +128,7 @@ export const { use: useGlobalSDK, provider: GlobalSDKProvider } = createSimpleCo if (started) return run started = true run = (async () => { + // oxlint-disable-next-line no-unmodified-loop-condition -- `started` is set to false by stop() which also aborts; both flags are checked to allow graceful exit while (!abort.signal.aborted && started) { attempt = new AbortController() lastEventAt = Date.now() diff --git a/packages/app/src/utils/runtime-adapters.test.ts b/packages/app/src/utils/runtime-adapters.test.ts index 9f408b8eb..49552e179 100644 --- a/packages/app/src/utils/runtime-adapters.test.ts +++ b/packages/app/src/utils/runtime-adapters.test.ts @@ -46,7 +46,9 @@ describe("runtime adapters", () => { }) test("resolves speech recognition constructor with webkit precedence", () => { + // oxlint-disable-next-line no-extraneous-class class SpeechCtor {} + // oxlint-disable-next-line no-extraneous-class class WebkitCtor {} const ctor = getSpeechRecognitionCtor({ SpeechRecognition: SpeechCtor, diff --git a/packages/console/app/src/routes/workspace/[id]/billing/reload-section.tsx b/packages/console/app/src/routes/workspace/[id]/billing/reload-section.tsx index 90c9d7a2e..a25963ab0 100644 --- a/packages/console/app/src/routes/workspace/[id]/billing/reload-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/billing/reload-section.tsx @@ -90,7 +90,7 @@ export function ReloadSection() { } const info = billingInfo()! setStore("show", true) - setStore("reload", info.reload ? true : true) + setStore("reload", true) setStore("reloadAmount", info.reloadAmount.toString()) setStore("reloadTrigger", info.reloadTrigger.toString()) } diff --git a/packages/desktop-electron/src/main/apps.ts b/packages/desktop-electron/src/main/apps.ts index d21b6cc9e..174da94a5 100644 --- a/packages/desktop-electron/src/main/apps.ts +++ b/packages/desktop-electron/src/main/apps.ts @@ -28,7 +28,7 @@ export function wslPath(path: string, mode: "windows" | "linux" | null): string const output = execFileSync("wsl", ["-e", "wslpath", flag, path]) return output.toString().trim() } catch (error) { - throw new Error(`Failed to run wslpath: ${String(error)}`) + throw new Error(`Failed to run wslpath: ${String(error)}`, { cause: error }) } } diff --git a/packages/function/src/api.ts b/packages/function/src/api.ts index 68b2d450b..58c74fe32 100644 --- a/packages/function/src/api.ts +++ b/packages/function/src/api.ts @@ -13,6 +13,7 @@ type Env = { } export class SyncServer extends DurableObject { + // oxlint-disable-next-line no-useless-constructor constructor(ctx: DurableObjectState, env: Env) { super(ctx, env) } diff --git a/packages/opencode/script/postinstall.mjs b/packages/opencode/script/postinstall.mjs index 2b990251c..7dcf3958a 100644 --- a/packages/opencode/script/postinstall.mjs +++ b/packages/opencode/script/postinstall.mjs @@ -64,7 +64,7 @@ function findBinary() { return { binaryPath, binaryName } } catch (error) { - throw new Error(`Could not find package ${packageName}: ${error.message}`) + throw new Error(`Could not find package ${packageName}: ${error.message}`, { cause: error }) } } diff --git a/packages/opencode/src/bus/bus-event.ts b/packages/opencode/src/bus/bus-event.ts index aad5f398e..369a40ed8 100644 --- a/packages/opencode/src/bus/bus-event.ts +++ b/packages/opencode/src/bus/bus-event.ts @@ -25,7 +25,7 @@ export namespace BusEvent { properties: def.properties, }) .meta({ - ref: "Event" + "." + def.type, + ref: `Event.${def.type}`, }) }) .toArray() diff --git a/packages/opencode/src/cli/cmd/debug/agent.ts b/packages/opencode/src/cli/cmd/debug/agent.ts index 6c7ad39c1..29d6ace59 100644 --- a/packages/opencode/src/cli/cmd/debug/agent.ts +++ b/packages/opencode/src/cli/cmd/debug/agent.ts @@ -111,6 +111,7 @@ function parseToolParams(input?: string) { } catch (evalError) { throw new Error( `Failed to parse --params. Use JSON or a JS object literal. JSON error: ${jsonError}. Eval error: ${evalError}.`, + { cause: evalError }, ) } } diff --git a/packages/opencode/src/cli/cmd/github.ts b/packages/opencode/src/cli/cmd/github.ts index 191aa2dfd..46d091642 100644 --- a/packages/opencode/src/cli/cmd/github.ts +++ b/packages/opencode/src/cli/cmd/github.ts @@ -1031,6 +1031,7 @@ export const GithubRunCommand = cmd({ console.error("Failed to get OIDC token:", error instanceof Error ? error.message : error) throw new Error( "Could not fetch an OIDC token. Make sure to add `id-token: write` to your workflow permissions.", + { cause: error }, ) } } @@ -1221,7 +1222,7 @@ export const GithubRunCommand = cmd({ console.log(` permission: ${permission}`) } catch (error) { console.error(`Failed to check permissions: ${error}`) - throw new Error(`Failed to check permissions for user ${actor}: ${error}`) + throw new Error(`Failed to check permissions for user ${actor}: ${error}`, { cause: error }) } if (!["admin", "write"].includes(permission)) throw new Error(`User ${actor} does not have write permissions`) diff --git a/packages/opencode/src/cli/cmd/web.ts b/packages/opencode/src/cli/cmd/web.ts index e656c83d9..9dd8796d6 100644 --- a/packages/opencode/src/cli/cmd/web.ts +++ b/packages/opencode/src/cli/cmd/web.ts @@ -34,7 +34,7 @@ export const WebCommand = cmd({ describe: "start opencode server and open web interface", handler: async (args) => { if (!Flag.OPENCODE_SERVER_PASSWORD) { - UI.println(UI.Style.TEXT_WARNING_BOLD + "! " + "OPENCODE_SERVER_PASSWORD is not set; server is unsecured.") + UI.println(UI.Style.TEXT_WARNING_BOLD + "! OPENCODE_SERVER_PASSWORD is not set; server is unsecured.") } const opts = await resolveNetworkOptions(args) const server = await Server.listen(opts) diff --git a/packages/opencode/src/patch/patch.ts b/packages/opencode/src/patch/patch.ts index d36ec72c7..749efd911 100644 --- a/packages/opencode/src/patch/patch.ts +++ b/packages/opencode/src/patch/patch.ts @@ -313,7 +313,7 @@ export function deriveNewContentsFromChunks(filePath: string, chunks: UpdateFile try { originalContent = readFileSync(filePath, "utf-8") } catch (error) { - throw new Error(`Failed to read file ${filePath}: ${error}`) + throw new Error(`Failed to read file ${filePath}: ${error}`, { cause: error }) } let originalLines = originalContent.split("\n") diff --git a/packages/opencode/src/server/instance/tui.ts b/packages/opencode/src/server/instance/tui.ts index 13f150655..0073ef98c 100644 --- a/packages/opencode/src/server/instance/tui.ts +++ b/packages/opencode/src/server/instance/tui.ts @@ -339,7 +339,7 @@ export const TuiRoutes = lazy(() => properties: def.properties, }) .meta({ - ref: "Event" + "." + def.type, + ref: `Event.${def.type}`, }) }), ), diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index 7a7493903..f04ea8cde 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -260,8 +260,7 @@ export namespace SessionPrompt { messageID: userMessage.info.id, sessionID: userMessage.info.sessionID, type: "text", - text: - BUILD_SWITCH + "\n\n" + `A plan file exists at ${plan}. You should execute on the plan defined within it`, + text: `${BUILD_SWITCH}\n\nA plan file exists at ${plan}. You should execute on the plan defined within it`, synthetic: true, }) userMessage.parts.push(part) diff --git a/packages/opencode/src/sync/sync-event.ts b/packages/opencode/src/sync/sync-event.ts index 2b1eb0981..bee7e3c4c 100644 --- a/packages/opencode/src/sync/sync-event.ts +++ b/packages/opencode/src/sync/sync-event.ts @@ -273,7 +273,7 @@ export function payloads() { data: def.schema, }) .meta({ - ref: "SyncEvent" + "." + def.type, + ref: `SyncEvent.${def.type}`, }) }) .toArray() diff --git a/packages/opencode/src/tool/read.ts b/packages/opencode/src/tool/read.ts index 701bfc4b9..4dc984d0e 100644 --- a/packages/opencode/src/tool/read.ts +++ b/packages/opencode/src/tool/read.ts @@ -181,7 +181,7 @@ export const ReadTool = Tool.define( ) } - let output = [`${filepath}`, `file`, "" + "\n"].join("\n") + let output = [`${filepath}`, `file`, "\n"].join("\n") output += file.raw.map((line, i) => `${i + file.offset}: ${line}`).join("\n") const last = file.offset + file.raw.length - 1 diff --git a/packages/opencode/src/tool/tool.ts b/packages/opencode/src/tool/tool.ts index 30be63a32..ca2586234 100644 --- a/packages/opencode/src/tool/tool.ts +++ b/packages/opencode/src/tool/tool.ts @@ -78,7 +78,7 @@ export namespace Tool { ) { return () => Effect.gen(function* () { - const toolInfo = init instanceof Function ? { ...(yield* init()) } : { ...init } + const toolInfo = typeof init === "function" ? { ...(yield* init()) } : { ...init } const execute = toolInfo.execute toolInfo.execute = (args, ctx) => { const attrs = { diff --git a/packages/opencode/test/mcp/lifecycle.test.ts b/packages/opencode/test/mcp/lifecycle.test.ts index 09caa1cd8..add7c66d9 100644 --- a/packages/opencode/test/mcp/lifecycle.test.ts +++ b/packages/opencode/test/mcp/lifecycle.test.ts @@ -53,6 +53,7 @@ function getOrCreateClientState(name?: string): MockClientState { class MockStdioTransport { stderr: null = null pid = 12345 + // oxlint-disable-next-line no-useless-constructor constructor(_opts: any) {} async start() { if (connectShouldHang) return new Promise(() => {}) // never resolves @@ -64,6 +65,7 @@ class MockStdioTransport { } class MockStreamableHTTP { + // oxlint-disable-next-line no-useless-constructor constructor(_url: URL, _opts?: any) {} async start() { if (connectShouldHang) return new Promise(() => {}) // never resolves @@ -76,6 +78,7 @@ class MockStreamableHTTP { } class MockSSE { + // oxlint-disable-next-line no-useless-constructor constructor(_url: URL, _opts?: any) {} async start() { if (connectShouldHang) return new Promise(() => {}) // never resolves diff --git a/packages/opencode/test/session/prompt.test.ts b/packages/opencode/test/session/prompt.test.ts index 1290570b8..4f5b19bca 100644 --- a/packages/opencode/test/session/prompt.test.ts +++ b/packages/opencode/test/session/prompt.test.ts @@ -60,12 +60,11 @@ function chat(text: string) { function hanging(ready: () => void) { const encoder = new TextEncoder() let timer: ReturnType | undefined - const first = - `data: ${JSON.stringify({ - id: "chatcmpl-1", - object: "chat.completion.chunk", - choices: [{ delta: { role: "assistant" } }], - })}` + "\n\n" + const first = `data: ${JSON.stringify({ + id: "chatcmpl-1", + object: "chat.completion.chunk", + choices: [{ delta: { role: "assistant" } }], + })}\n\n` const rest = [ `data: ${JSON.stringify({ -- cgit v1.2.3