diff --git a/STATS.md b/STATS.md
index aedfa87cee..d2b518c995 100644
--- a/STATS.md
+++ b/STATS.md
@@ -125,3 +125,4 @@
| 2025-10-29 | 606,259 (+10,483) | 542,064 (+9,626) | 1,148,323 (+20,109) |
| 2025-10-30 | 613,746 (+7,487) | 542,064 (+0) | 1,155,810 (+7,487) |
| 2025-10-30 | 617,846 (+4,100) | 555,026 (+12,962) | 1,172,872 (+17,062) |
+| 2025-10-31 | 626,612 (+8,766) | 564,579 (+9,553) | 1,191,191 (+18,319) |
diff --git a/bun.lock b/bun.lock
index d1f6cfd214..02968de7ff 100644
--- a/bun.lock
+++ b/bun.lock
@@ -37,7 +37,7 @@
},
"packages/console/core": {
"name": "@opencode-ai/console-core",
- "version": "0.15.29",
+ "version": "0.15.30",
"dependencies": {
"@aws-sdk/client-sts": "3.782.0",
"@jsx-email/render": "1.1.1",
@@ -64,7 +64,7 @@
},
"packages/console/function": {
"name": "@opencode-ai/console-function",
- "version": "0.15.29",
+ "version": "0.15.30",
"dependencies": {
"@ai-sdk/anthropic": "2.0.0",
"@ai-sdk/openai": "2.0.2",
@@ -88,7 +88,7 @@
},
"packages/console/mail": {
"name": "@opencode-ai/console-mail",
- "version": "0.15.29",
+ "version": "0.15.30",
"dependencies": {
"@jsx-email/all": "2.2.3",
"@jsx-email/cli": "1.4.3",
@@ -109,7 +109,7 @@
},
"packages/desktop": {
"name": "@opencode-ai/desktop",
- "version": "0.15.29",
+ "version": "0.15.30",
"dependencies": {
"@kobalte/core": "catalog:",
"@opencode-ai/sdk": "workspace:*",
@@ -148,7 +148,7 @@
},
"packages/function": {
"name": "@opencode-ai/function",
- "version": "0.15.29",
+ "version": "0.15.30",
"dependencies": {
"@octokit/auth-app": "8.0.1",
"@octokit/rest": "22.0.0",
@@ -164,7 +164,7 @@
},
"packages/opencode": {
"name": "opencode",
- "version": "0.15.29",
+ "version": "0.15.30",
"bin": {
"opencode": "./bin/opencode",
},
@@ -232,7 +232,7 @@
},
"packages/plugin": {
"name": "@opencode-ai/plugin",
- "version": "0.15.29",
+ "version": "0.15.30",
"dependencies": {
"@opencode-ai/sdk": "workspace:*",
"zod": "catalog:",
@@ -252,7 +252,7 @@
},
"packages/sdk/js": {
"name": "@opencode-ai/sdk",
- "version": "0.15.29",
+ "version": "0.15.30",
"devDependencies": {
"@hey-api/openapi-ts": "0.81.0",
"@tsconfig/node22": "catalog:",
@@ -263,7 +263,7 @@
},
"packages/slack": {
"name": "@opencode-ai/slack",
- "version": "0.15.29",
+ "version": "0.15.30",
"dependencies": {
"@opencode-ai/sdk": "workspace:*",
"@slack/bolt": "^3.17.1",
@@ -276,7 +276,7 @@
},
"packages/ui": {
"name": "@opencode-ai/ui",
- "version": "0.15.29",
+ "version": "0.15.30",
"dependencies": {
"@kobalte/core": "catalog:",
"@opencode-ai/sdk": "workspace:*",
@@ -306,7 +306,7 @@
},
"packages/web": {
"name": "@opencode-ai/web",
- "version": "0.15.29",
+ "version": "0.15.30",
"dependencies": {
"@astrojs/cloudflare": "12.6.3",
"@astrojs/markdown-remark": "6.3.1",
diff --git a/packages/console/app/package.json b/packages/console/app/package.json
index ec70d7c4d6..ad0b2f4db1 100644
--- a/packages/console/app/package.json
+++ b/packages/console/app/package.json
@@ -7,7 +7,7 @@
"dev:remote": "VITE_AUTH_URL=https://auth.dev.opencode.ai bun sst shell --stage=dev bun dev",
"build": "vinxi build && ../../opencode/script/schema.ts ./.output/public/config.json",
"start": "vinxi start",
- "version": "0.15.29"
+ "version": "0.15.30"
},
"dependencies": {
"@ibm/plex": "6.4.1",
diff --git a/packages/console/core/package.json b/packages/console/core/package.json
index 36e37c3bf1..21a82227b3 100644
--- a/packages/console/core/package.json
+++ b/packages/console/core/package.json
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package.json",
"name": "@opencode-ai/console-core",
- "version": "0.15.29",
+ "version": "0.15.30",
"private": true,
"type": "module",
"dependencies": {
diff --git a/packages/console/function/package.json b/packages/console/function/package.json
index 6f13c94816..a7b3a9bd78 100644
--- a/packages/console/function/package.json
+++ b/packages/console/function/package.json
@@ -1,6 +1,6 @@
{
"name": "@opencode-ai/console-function",
- "version": "0.15.29",
+ "version": "0.15.30",
"$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 b01703b4d6..5f7b345783 100644
--- a/packages/console/mail/package.json
+++ b/packages/console/mail/package.json
@@ -1,6 +1,6 @@
{
"name": "@opencode-ai/console-mail",
- "version": "0.15.29",
+ "version": "0.15.30",
"dependencies": {
"@jsx-email/all": "2.2.3",
"@jsx-email/cli": "1.4.3",
diff --git a/packages/desktop/index.html b/packages/desktop/index.html
index 9209acfc7e..e88b49ac8b 100644
--- a/packages/desktop/index.html
+++ b/packages/desktop/index.html
@@ -4,7 +4,7 @@
-
+
OpenCode
diff --git a/packages/desktop/package.json b/packages/desktop/package.json
index 32fe27b833..e34910bba2 100644
--- a/packages/desktop/package.json
+++ b/packages/desktop/package.json
@@ -1,6 +1,6 @@
{
"name": "@opencode-ai/desktop",
- "version": "0.15.29",
+ "version": "0.15.30",
"description": "",
"type": "module",
"scripts": {
diff --git a/packages/desktop/public/favicon.svg b/packages/desktop/public/favicon.svg
new file mode 120000
index 0000000000..80804d2579
--- /dev/null
+++ b/packages/desktop/public/favicon.svg
@@ -0,0 +1 @@
+../../ui/src/assets/favicon/favicon.svg
\ No newline at end of file
diff --git a/packages/desktop/src/assets/favicon.svg b/packages/desktop/src/assets/favicon.svg
deleted file mode 100644
index 3c81bbdb4c..0000000000
--- a/packages/desktop/src/assets/favicon.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
diff --git a/packages/function/package.json b/packages/function/package.json
index eb18580923..e42ba6b712 100644
--- a/packages/function/package.json
+++ b/packages/function/package.json
@@ -1,6 +1,6 @@
{
"name": "@opencode-ai/function",
- "version": "0.15.29",
+ "version": "0.15.30",
"$schema": "https://json.schemastore.org/package.json",
"private": true,
"type": "module",
diff --git a/packages/opencode/package.json b/packages/opencode/package.json
index d8ffc7510d..ac903ef0b6 100644
--- a/packages/opencode/package.json
+++ b/packages/opencode/package.json
@@ -1,6 +1,6 @@
{
"$schema": "https://json.schemastore.org/package.json",
- "version": "0.15.29",
+ "version": "0.15.30",
"name": "opencode",
"type": "module",
"private": true,
diff --git a/packages/plugin/package.json b/packages/plugin/package.json
index 53b90e0c43..41707d924f 100644
--- a/packages/plugin/package.json
+++ b/packages/plugin/package.json
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package.json",
"name": "@opencode-ai/plugin",
- "version": "0.15.29",
+ "version": "0.15.30",
"type": "module",
"scripts": {
"typecheck": "tsgo --noEmit",
diff --git a/packages/sdk/js/package.json b/packages/sdk/js/package.json
index 3c00bafcb4..29ace13ac0 100644
--- a/packages/sdk/js/package.json
+++ b/packages/sdk/js/package.json
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package.json",
"name": "@opencode-ai/sdk",
- "version": "0.15.29",
+ "version": "0.15.30",
"type": "module",
"scripts": {
"typecheck": "tsgo --noEmit",
diff --git a/packages/sdk/js/src/gen/types.gen.ts b/packages/sdk/js/src/gen/types.gen.ts
index 0ff1f032f6..df110326bc 100644
--- a/packages/sdk/js/src/gen/types.gen.ts
+++ b/packages/sdk/js/src/gen/types.gen.ts
@@ -430,6 +430,9 @@ export type Config = {
options?: {
[key: string]: unknown
}
+ headers?: {
+ [key: string]: string
+ }
provider?: {
npm: string
}
@@ -991,6 +994,9 @@ export type Model = {
options: {
[key: string]: unknown
}
+ headers?: {
+ [key: string]: string
+ }
provider?: {
npm: string
}
diff --git a/packages/slack/package.json b/packages/slack/package.json
index 28df57736d..e9e3a638bc 100644
--- a/packages/slack/package.json
+++ b/packages/slack/package.json
@@ -1,6 +1,6 @@
{
"name": "@opencode-ai/slack",
- "version": "0.15.29",
+ "version": "0.15.30",
"type": "module",
"scripts": {
"dev": "bun run src/index.ts",
diff --git a/packages/ui/package.json b/packages/ui/package.json
index 91ab3867e0..7fcb26fb41 100644
--- a/packages/ui/package.json
+++ b/packages/ui/package.json
@@ -1,6 +1,6 @@
{
"name": "@opencode-ai/ui",
- "version": "0.15.29",
+ "version": "0.15.30",
"type": "module",
"exports": {
".": "./src/components/index.ts",
diff --git a/packages/ui/src/assets/favicon/apple-touch-icon.png b/packages/ui/src/assets/favicon/apple-touch-icon.png
new file mode 100644
index 0000000000..13d79dbec4
Binary files /dev/null and b/packages/ui/src/assets/favicon/apple-touch-icon.png differ
diff --git a/packages/ui/src/assets/favicon/favicon-96x96.png b/packages/ui/src/assets/favicon/favicon-96x96.png
new file mode 100644
index 0000000000..c9d3cbf0ee
Binary files /dev/null and b/packages/ui/src/assets/favicon/favicon-96x96.png differ
diff --git a/packages/ui/src/assets/favicon/favicon.ico b/packages/ui/src/assets/favicon/favicon.ico
new file mode 100644
index 0000000000..a7b497fb92
Binary files /dev/null and b/packages/ui/src/assets/favicon/favicon.ico differ
diff --git a/packages/ui/src/assets/favicon/favicon.svg b/packages/ui/src/assets/favicon/favicon.svg
new file mode 100644
index 0000000000..ffb5f72981
--- /dev/null
+++ b/packages/ui/src/assets/favicon/favicon.svg
@@ -0,0 +1,18 @@
+
+
diff --git a/packages/ui/src/assets/favicon/site.webmanifest b/packages/ui/src/assets/favicon/site.webmanifest
new file mode 100644
index 0000000000..f7522f8f3a
--- /dev/null
+++ b/packages/ui/src/assets/favicon/site.webmanifest
@@ -0,0 +1,21 @@
+{
+ "name": "OpenCode",
+ "short_name": "OpenCode",
+ "icons": [
+ {
+ "src": "/web-app-manifest-192x192.png",
+ "sizes": "192x192",
+ "type": "image/png",
+ "purpose": "maskable"
+ },
+ {
+ "src": "/web-app-manifest-512x512.png",
+ "sizes": "512x512",
+ "type": "image/png",
+ "purpose": "maskable"
+ }
+ ],
+ "theme_color": "#ffffff",
+ "background_color": "#ffffff",
+ "display": "standalone"
+}
\ No newline at end of file
diff --git a/packages/ui/src/assets/favicon/web-app-manifest-192x192.png b/packages/ui/src/assets/favicon/web-app-manifest-192x192.png
new file mode 100644
index 0000000000..ca53fa8daa
Binary files /dev/null and b/packages/ui/src/assets/favicon/web-app-manifest-192x192.png differ
diff --git a/packages/ui/src/assets/favicon/web-app-manifest-512x512.png b/packages/ui/src/assets/favicon/web-app-manifest-512x512.png
new file mode 100644
index 0000000000..91b4eb33f5
Binary files /dev/null and b/packages/ui/src/assets/favicon/web-app-manifest-512x512.png differ
diff --git a/packages/ui/src/components/favicon.tsx b/packages/ui/src/components/favicon.tsx
new file mode 100644
index 0000000000..de32ed2afb
--- /dev/null
+++ b/packages/ui/src/components/favicon.tsx
@@ -0,0 +1,19 @@
+import { Link, Meta } from "@solidjs/meta"
+import favicon96 from "../assets/favicon/favicon-96x96.png"
+import faviconSvg from "../assets/favicon/favicon.svg"
+import faviconIco from "../assets/favicon/favicon.ico"
+import appleTouchIcon from "../assets/favicon/apple-touch-icon.png"
+import siteWebmanifest from "../assets/favicon/site.webmanifest"
+
+export const Favicon = () => {
+ return (
+ <>
+
+
+
+
+
+
+ >
+ )
+}
diff --git a/packages/ui/src/components/index.ts b/packages/ui/src/components/index.ts
index 8d6ddc89cf..115e5f14fb 100644
--- a/packages/ui/src/components/index.ts
+++ b/packages/ui/src/components/index.ts
@@ -9,6 +9,7 @@ export * from "./diff-changes"
export * from "./icon"
export * from "./icon-button"
export * from "./input"
+export * from "./favicon"
export * from "./fonts"
export * from "./list"
export * from "./markdown"
diff --git a/packages/ui/src/components/message-part.css b/packages/ui/src/components/message-part.css
index fa251a2b3b..dcfadeff67 100644
--- a/packages/ui/src/components/message-part.css
+++ b/packages/ui/src/components/message-part.css
@@ -29,20 +29,21 @@
[data-component="tool-error"] {
display: flex;
- align-items: center;
+ align-items: start;
gap: 8px;
- [data-slot="icon"] {
+ [data-slot="tool-error-icon"] {
color: var(--icon-critical-active);
+ margin-top: 4px;
}
- [data-slot="content"] {
+ [data-slot="tool-error-content"] {
display: flex;
- align-items: center;
+ align-items: start;
gap: 8px;
}
- [data-slot="title"] {
+ [data-slot="tool-error-title"] {
font-family: var(--font-family-sans);
font-size: var(--font-size-small);
font-style: normal;
@@ -51,7 +52,11 @@
letter-spacing: var(--letter-spacing-normal);
color: var(--ember-light-11);
text-transform: capitalize;
+ white-space: nowrap;
}
+
+ /* [data-slot="tool-error-message"] { */
+ /* } */
}
[data-component="tool-output"] {
diff --git a/packages/ui/src/components/message-part.tsx b/packages/ui/src/components/message-part.tsx
index 1aaab751a0..272a716a4e 100644
--- a/packages/ui/src/components/message-part.tsx
+++ b/packages/ui/src/components/message-part.tsx
@@ -151,15 +151,17 @@ PART_MAPPING["tool"] = function ToolPartDisplay(props) {
return (
-
+
-
-
{title}
-
{rest.join(": ")}
+
+
{title}
+
{rest.join(": ")}
-
{cleaned}
+
+ {cleaned}
+
diff --git a/packages/web/package.json b/packages/web/package.json
index 797bf3a626..59bad65b72 100644
--- a/packages/web/package.json
+++ b/packages/web/package.json
@@ -1,7 +1,7 @@
{
"name": "@opencode-ai/web",
"type": "module",
- "version": "0.15.29",
+ "version": "0.15.30",
"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 c65cb039ba..9f845c2bcc 100644
--- a/sdks/vscode/package.json
+++ b/sdks/vscode/package.json
@@ -2,7 +2,7 @@
"name": "opencode",
"displayName": "opencode",
"description": "opencode for VS Code",
- "version": "0.15.29",
+ "version": "0.15.30",
"publisher": "sst-dev",
"repository": {
"type": "git",