From 733e5cd876bb0a025bacbbd1aab7f8abf4e957f1 Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" <219766164+opencode-agent[bot]@users.noreply.github.com> Date: Tue, 2 Dec 2025 14:12:11 -0600 Subject: [PATCH 01/26] add OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT (#4996) Co-authored-by: opencode-agent[bot] Co-authored-by: rekram1-node --- packages/opencode/src/cli/cmd/tui/app.tsx | 5 +++++ packages/opencode/src/flag/flag.ts | 1 + 2 files changed, 6 insertions(+) diff --git a/packages/opencode/src/cli/cmd/tui/app.tsx b/packages/opencode/src/cli/cmd/tui/app.tsx index 5b7f522534d..8f3b47a39ab 100644 --- a/packages/opencode/src/cli/cmd/tui/app.tsx +++ b/packages/opencode/src/cli/cmd/tui/app.tsx @@ -5,6 +5,7 @@ import { RouteProvider, useRoute } from "@tui/context/route" import { Switch, Match, createEffect, untrack, ErrorBoundary, createSignal, onMount, batch, Show, on } from "solid-js" import { Installation } from "@/installation" import { Global } from "@/global" +import { Flag } from "@/flag/flag" import { DialogProvider, useDialog } from "@tui/ui/dialog" import { DialogProvider as DialogProviderList } from "@tui/component/dialog-provider" import { SDKProvider, useSDK } from "@tui/context/sdk" @@ -460,6 +461,10 @@ function App() { height={dimensions().height} backgroundColor={theme.background} onMouseUp={async () => { + if (Flag.OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT) { + renderer.clearSelection() + return + } const text = renderer.getSelection()?.getSelectedText() if (text && text.length > 0) { const base64 = Buffer.from(text).toString("base64") diff --git a/packages/opencode/src/flag/flag.ts b/packages/opencode/src/flag/flag.ts index 4edbd5ace0a..9a3d0437be5 100644 --- a/packages/opencode/src/flag/flag.ts +++ b/packages/opencode/src/flag/flag.ts @@ -17,6 +17,7 @@ export namespace Flag { // Experimental export const OPENCODE_EXPERIMENTAL = truthy("OPENCODE_EXPERIMENTAL") export const OPENCODE_EXPERIMENTAL_WATCHER = OPENCODE_EXPERIMENTAL || truthy("OPENCODE_EXPERIMENTAL_WATCHER") + export const OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT = truthy("OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT") function truthy(key: string) { const value = process.env[key]?.toLowerCase() From 9d2b9ef2d488debdb9df831879de108d6b0cd005 Mon Sep 17 00:00:00 2001 From: Aiden Cline Date: Tue, 2 Dec 2025 14:27:41 -0600 Subject: [PATCH 02/26] ci: dont forget our european designer --- script/publish.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/script/publish.ts b/script/publish.ts index f29b29cfc7e..ce0fd7d0d41 100755 --- a/script/publish.ts +++ b/script/publish.ts @@ -84,6 +84,7 @@ if (!Script.preview) { "jayair", "fwang", "adamdotdevin", + "iamdavidhill", "opencode-agent[bot]", ] const compare = From 3183e8b7d432aea37f7723bbfd6e7258bbf2f219 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 2 Dec 2025 20:28:17 +0000 Subject: [PATCH 03/26] chore: format code --- packages/plugin/package.json | 2 +- packages/sdk/js/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/plugin/package.json b/packages/plugin/package.json index be42ddab92f..148273ddc18 100644 --- a/packages/plugin/package.json +++ b/packages/plugin/package.json @@ -24,4 +24,4 @@ "typescript": "catalog:", "@typescript/native-preview": "catalog:" } -} \ No newline at end of file +} diff --git a/packages/sdk/js/package.json b/packages/sdk/js/package.json index 06656724cdd..ea30214854a 100644 --- a/packages/sdk/js/package.json +++ b/packages/sdk/js/package.json @@ -26,4 +26,4 @@ "publishConfig": { "directory": "dist" } -} \ No newline at end of file +} From f17e1def32c36c7eb89d1a1e810c0de4ed71c424 Mon Sep 17 00:00:00 2001 From: Jaga Santagostino Date: Tue, 2 Dec 2025 22:11:03 +0100 Subject: [PATCH 04/26] toggle to hide username in TUI (#4750) Co-authored-by: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> --- .../src/cli/cmd/tui/routes/session/index.tsx | 19 ++++++++++++++++++- packages/opencode/src/config/config.ts | 1 + packages/sdk/js/src/gen/types.gen.ts | 4 ++++ packages/web/src/content/docs/keybinds.mdx | 1 + packages/web/src/content/docs/tui.mdx | 13 +++++++++++++ 5 files changed, 37 insertions(+), 1 deletion(-) 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 83f44c944d7..b0860c0b8f6 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx @@ -81,6 +81,7 @@ const context = createContext<{ conceal: () => boolean showThinking: () => boolean showTimestamps: () => boolean + usernameVisible: () => boolean showDetails: () => boolean diffWrapMode: () => "word" | "none" sync: ReturnType @@ -115,6 +116,7 @@ export function Session() { const [conceal, setConceal] = createSignal(true) const [showThinking, setShowThinking] = createSignal(kv.get("thinking_visibility", true)) const [showTimestamps, setShowTimestamps] = createSignal(kv.get("timestamps", "hide") === "show") + const [usernameVisible, setUsernameVisible] = createSignal(kv.get("username_visible", true)) const [showDetails, setShowDetails] = createSignal(kv.get("tool_details_visibility", true)) const [diffWrapMode, setDiffWrapMode] = createSignal<"word" | "none">("word") @@ -419,6 +421,20 @@ export function Session() { dialog.clear() }, }, + { + title: usernameVisible() ? "Hide username" : "Show username", + value: "session.username_visible.toggle", + keybind: "username_toggle", + category: "Session", + onSelect: (dialog) => { + setUsernameVisible((prev) => { + const next = !prev + kv.set("username_visible", next) + return next + }) + dialog.clear() + }, + }, { title: "Toggle code concealment", value: "session.toggle.conceal", @@ -776,6 +792,7 @@ export function Session() { conceal, showThinking, showTimestamps, + usernameVisible, showDetails, diffWrapMode, sync, @@ -995,7 +1012,7 @@ function UserMessage(props: { - {sync.data.config.username ?? "You"}{" "} + {ctx.usernameVisible() ? `${sync.data.config.username ?? "You"} ` : "You"}{" "} e").describe("Open external editor"), theme_list: z.string().optional().default("t").describe("List available themes"), sidebar_toggle: z.string().optional().default("b").describe("Toggle sidebar"), + username_toggle: z.string().optional().default("none").describe("Toggle username visibility"), status_view: z.string().optional().default("s").describe("View status"), session_export: z.string().optional().default("x").describe("Export session to editor"), session_new: z.string().optional().default("n").describe("Create a new session"), diff --git a/packages/sdk/js/src/gen/types.gen.ts b/packages/sdk/js/src/gen/types.gen.ts index d81fda9f846..f8e1d34fb6e 100644 --- a/packages/sdk/js/src/gen/types.gen.ts +++ b/packages/sdk/js/src/gen/types.gen.ts @@ -732,6 +732,10 @@ export type KeybindsConfig = { * Toggle sidebar */ sidebar_toggle?: string + /** + * Toggle username visibility + */ + username_toggle?: string /** * View status */ diff --git a/packages/web/src/content/docs/keybinds.mdx b/packages/web/src/content/docs/keybinds.mdx index afcff3a0edd..80a74c159bb 100644 --- a/packages/web/src/content/docs/keybinds.mdx +++ b/packages/web/src/content/docs/keybinds.mdx @@ -14,6 +14,7 @@ OpenCode has a list of keybinds that you can customize through the OpenCode conf "editor_open": "e", "theme_list": "t", "sidebar_toggle": "b", + "username_toggle": "none", "status_view": "s", "session_export": "x", "session_new": "n", diff --git a/packages/web/src/content/docs/tui.mdx b/packages/web/src/content/docs/tui.mdx index a580a4ce8d3..2543df639b2 100644 --- a/packages/web/src/content/docs/tui.mdx +++ b/packages/web/src/content/docs/tui.mdx @@ -348,3 +348,16 @@ You can customize TUI behavior through your OpenCode config file. - `scroll_acceleration` - Enable macOS-style scroll acceleration for smooth, natural scrolling. When enabled, scroll speed increases with rapid scrolling gestures and stays precise for slower movements. **This setting takes precedence over `scroll_speed` and overrides it when enabled.** - `scroll_speed` - Controls how fast the TUI scrolls when using scroll commands (minimum: `1`). Defaults to `1` on Unix and `3` on Windows. **Note: This is ignored if `scroll_acceleration.enabled` is set to `true`.** + +--- + +## View customization + +You can customize various aspects of the TUI view using the command palette (`ctrl+x h` or `/help`). These settings persist across restarts. + +### Username display + +Toggle whether your username appears in chat messages. Access this through: + +- Command palette: Search for "username" or "hide username" +- The setting persists automatically and will be remembered across TUI sessions From f354507d42432fe2da98c0a4aa558d08fe27090e Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Tue, 2 Dec 2025 15:11:10 -0600 Subject: [PATCH 05/26] fix: session turn margins --- packages/desktop/src/pages/session.tsx | 8 +++++++- packages/enterprise/src/routes/share/[shareID].tsx | 7 +++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/packages/desktop/src/pages/session.tsx b/packages/desktop/src/pages/session.tsx index 515f67a7c69..d6ce62b7030 100644 --- a/packages/desktop/src/pages/session.tsx +++ b/packages/desktop/src/pages/session.tsx @@ -355,7 +355,13 @@ export default function Page() { classes={{ root: "pb-20 flex-1 min-w-0", content: "pb-20", - container: "w-full " + (wide() ? "max-w-146 mx-auto px-6" : "pr-6 pl-18"), + container: + "w-full " + + (wide() + ? "max-w-146 mx-auto px-6" + : session.messages.user().length > 1 + ? "pr-6 pl-18" + : "px-6"), }} diffComponent={Diff} /> diff --git a/packages/enterprise/src/routes/share/[shareID].tsx b/packages/enterprise/src/routes/share/[shareID].tsx index f579bfa0388..5f6a0948608 100644 --- a/packages/enterprise/src/routes/share/[shareID].tsx +++ b/packages/enterprise/src/routes/share/[shareID].tsx @@ -284,7 +284,8 @@ export default function () { classList={{ "w-full flex justify-start items-start min-w-0": true, "max-w-146 mx-auto px-6": wide(), - "pr-6 pl-18": !wide(), + "pr-6 pl-18": !wide() && messages().length > 1, + "px-6": !wide() && messages().length === 1, }} > {title()} @@ -302,7 +303,9 @@ export default function () { classes={{ root: "grow", content: "flex flex-col justify-between items-start", - container: "w-full pb-20 " + (wide() ? "max-w-146 mx-auto px-6" : "pr-6 pl-18"), + container: + "w-full pb-20 " + + (wide() ? "max-w-146 mx-auto px-6" : messages().length > 1 ? "pr-6 pl-18" : "px-6"), }} diffComponent={ClientOnlyDiff} > From 53a7c2885bc3d8dc8db25dadd39c57bd9c058311 Mon Sep 17 00:00:00 2001 From: Aiden Cline Date: Tue, 2 Dec 2025 16:04:08 -0600 Subject: [PATCH 06/26] bump default lsp server timeout --- packages/opencode/src/lsp/client.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/opencode/src/lsp/client.ts b/packages/opencode/src/lsp/client.ts index f8b7db7aebe..37658e56d96 100644 --- a/packages/opencode/src/lsp/client.ts +++ b/packages/opencode/src/lsp/client.ts @@ -104,7 +104,7 @@ export namespace LSPClient { }, }, }), - 5_000, + 45_000, ).catch((err) => { l.error("initialize error", { error: err }) throw new InitializeError( From a4e3451d5cb53e9f5c6186ca28b4c7457057649f Mon Sep 17 00:00:00 2001 From: Aiden Cline Date: Tue, 2 Dec 2025 16:59:31 -0600 Subject: [PATCH 07/26] tweak: make message border match color of agent it was sent to --- packages/opencode/src/cli/cmd/tui/routes/session/index.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 b0860c0b8f6..54020af93ff 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx @@ -957,13 +957,14 @@ function UserMessage(props: { pending?: string }) { const ctx = use() + const local = useLocal() const text = createMemo(() => props.parts.flatMap((x) => (x.type === "text" && !x.synthetic ? [x] : []))[0]) const files = createMemo(() => props.parts.flatMap((x) => (x.type === "file" ? [x] : []))) const sync = useSync() const { theme } = useTheme() const [hover, setHover] = createSignal(false) const queued = createMemo(() => props.pending && props.message.id > props.pending) - const color = createMemo(() => (queued() ? theme.accent : theme.secondary)) + const color = createMemo(() => (queued() ? theme.accent : local.agent.color(props.message.agent))) const compaction = createMemo(() => props.parts.find((x) => x.type === "compaction")) From 2a8473891b2965da8a6ec21f82373582ffb63b92 Mon Sep 17 00:00:00 2001 From: Jay V Date: Tue, 2 Dec 2025 18:08:19 -0500 Subject: [PATCH 08/26] docs: replace deprecated opencode auth login command with /connect across all documentation Users no longer need to exit the TUI to add providers - they can now use the /connect command directly in the terminal interface. Updated all provider setup instructions to use simplified format with /connect command instead of the deprecated opencode auth login CLI command. Added /connect to TUI commands reference and streamlined provider documentation to show clearer, more concise setup steps. --- packages/web/src/content/docs/config.mdx | 2 +- packages/web/src/content/docs/index.mdx | 22 +- packages/web/src/content/docs/models.mdx | 2 +- packages/web/src/content/docs/providers.mdx | 814 +++++++----------- .../web/src/content/docs/troubleshooting.mdx | 9 +- packages/web/src/content/docs/tui.mdx | 10 + packages/web/src/content/docs/zen.mdx | 2 +- 7 files changed, 337 insertions(+), 524 deletions(-) diff --git a/packages/web/src/content/docs/config.mdx b/packages/web/src/content/docs/config.mdx index 46d0d82685a..82ea391e8a4 100644 --- a/packages/web/src/content/docs/config.mdx +++ b/packages/web/src/content/docs/config.mdx @@ -362,7 +362,7 @@ You can disable providers that are loaded automatically through the `disabled_pr The `disabled_providers` option accepts an array of provider IDs. When a provider is disabled: - It won't be loaded even if environment variables are set. -- It won't be loaded even if API keys are configured through `opencode auth login`. +- It won't be loaded even if API keys are configured through the `/connect` command. - The provider's models won't appear in the model selection list. --- diff --git a/packages/web/src/content/docs/index.mdx b/packages/web/src/content/docs/index.mdx index 1e1b67782bd..f37dca19d06 100644 --- a/packages/web/src/content/docs/index.mdx +++ b/packages/web/src/content/docs/index.mdx @@ -132,23 +132,21 @@ If you are new to using LLM providers, we recommend using [OpenCode Zen](/docs/z It's a curated list of models that have been tested and verified by the OpenCode team. -1. Run `opencode auth login`, select opencode, and head to [opencode.ai/auth](https://opencode.ai/auth). +1. Run the `/connect` command in the TUI, select opencode, and head to [opencode.ai/auth](https://opencode.ai/auth). + + ```txt + /connect + ``` + 2. Sign in, add your billing details, and copy your API key. -3. Paste your API key. - ```bash - $ opencode auth login +3. Paste your API key. - ┌ Add credential - │ - ◇ Select provider - │ opencode + ```txt + ┌ API key │ - ● Create an api key at https://opencode.ai/auth │ - ◆ Enter your API key - │ _ - └ + └ enter ``` Alternatively, you can select one of the other providers. [Learn more](/docs/providers#directory). diff --git a/packages/web/src/content/docs/models.mdx b/packages/web/src/content/docs/models.mdx index 38fa2cc4df6..0402d4973ec 100644 --- a/packages/web/src/content/docs/models.mdx +++ b/packages/web/src/content/docs/models.mdx @@ -9,7 +9,7 @@ OpenCode uses the [AI SDK](https://ai-sdk.dev/) and [Models.dev](https://models. ## Providers -Most popular providers are preloaded by default. If you've added the credentials for a provider through `opencode auth login`, they'll be available when you start OpenCode. +Most popular providers are preloaded by default. If you've added the credentials for a provider through the `/connect` command, they'll be available when you start OpenCode. Learn more about [providers](/docs/providers). diff --git a/packages/web/src/content/docs/providers.mdx b/packages/web/src/content/docs/providers.mdx index 0e801908295..bb284901f53 100644 --- a/packages/web/src/content/docs/providers.mdx +++ b/packages/web/src/content/docs/providers.mdx @@ -10,14 +10,14 @@ OpenCode uses the [AI SDK](https://ai-sdk.dev/) and [Models.dev](https://models. To add a provider you need to: -1. Add the API keys for the provider using `opencode auth login`. +1. Add the API keys for the provider using the `/connect` command. 2. Configure the provider in your OpenCode config. --- ### Credentials -When you add a provider's API keys with `opencode auth login`, they are stored +When you add a provider's API keys with the `/connect` command, they are stored in `~/.local/share/opencode/auth.json`. --- @@ -57,27 +57,29 @@ tested and verified to work well with OpenCode. [Learn more](/docs/zen). If you are new, we recommend starting with OpenCode Zen. ::: -1. Run `opencode auth login`, select opencode, and head to [opencode.ai/auth](https://opencode.ai/auth). +1. Run the `/connect` command in the TUI, select opencode, and head to [opencode.ai/auth](https://opencode.ai/auth). + + ```txt + /connect + ``` + 2. Sign in, add your billing details, and copy your API key. -3. Paste your API key. - ```bash - $ opencode auth login +3. Paste your API key. - ┌ Add credential - │ - ◇ Select provider - │ opencode + ```txt + ┌ API key │ - ● Create an api key at https://opencode.ai/auth │ - ◆ Enter your API key - │ _ - └ + └ enter ``` 4. Run `/models` in the TUI to see the list of models we recommend. + ```txt + /models + ``` + It works like any other provider in OpenCode. And is completely optional to use it. @@ -127,47 +129,43 @@ To use Amazon Bedrock with OpenCode: 1. Run the `/models` command to select the model you want. + ```txt + /models + ``` + --- ### Anthropic -We recommend signing up for [Claude Pro](https://www.anthropic.com/news/claude-pro) or [Max](https://www.anthropic.com/max), it's the most cost-effective way to use opencode. +We recommend signing up for [Claude Pro](https://www.anthropic.com/news/claude-pro) or [Max](https://www.anthropic.com/max). -Once you've signed up, run `opencode auth login` and select Anthropic. +1. Once you've signed up, run the `/connect` command and select Anthropic. -```bash -$ opencode auth login + ```txt + /connect + ``` -┌ Add credential -│ -◆ Select provider -│ ● Anthropic -│ ... -└ -``` +2. Here you can select the **Claude Pro/Max** option and it'll open your browser + and ask you to authenticate. -Here you can select the **Claude Pro/Max** option and it'll open your browser -and ask you to authenticate. - -```bash -$ opencode auth login -┌ Add credential -│ -◇ Select provider -│ Anthropic -│ -◆ Login method -│ ● Claude Pro/Max -│ ○ Create API Key -│ ○ Manually enter API Key -└ -``` + ```txt + ┌ Select auth method + │ + │ Claude Pro/Max + │ Create an API Key + │ Manually enter API Key + └ + ``` + +3. Now all the the Anthropic models should be available when you use the `/models` command. -Now all the the Anthropic models should be available when you use the `/models` command. + ```txt + /models + ``` ##### Using API keys -You can also select **Create API Key** if you don't have a Pro/Max subscription. It'll also open your browser and ask you to login to Anthropic and give you a code you can paste in your terminal. +You can also select **Create an API Key** if you don't have a Pro/Max subscription. It'll also open your browser and ask you to login to Anthropic and give you a code you can paste in your terminal. Or if you already have an API key, you can select **Manually enter API Key** and paste it in your terminal. @@ -185,32 +183,19 @@ Or if you already have an API key, you can select **Manually enter API Key** and The deployment name must match the model name for opencode to work properly. ::: -3. Run `opencode auth login` and select **Azure**. +3. Run the `/connect` command and search for **Azure**. - ```bash - $ opencode auth login - - ┌ Add credential - │ - ◆ Select provider - │ ● Azure - │ ... - └ + ```txt + /connect ``` 4. Enter your API key. - ```bash - $ opencode auth login - - ┌ Add credential + ```txt + ┌ API key │ - ◇ Select provider - │ Azure │ - ◇ Enter your API key - │ _ - └ + └ enter ``` 5. Set your resource name as an environment variable: @@ -227,6 +212,10 @@ Or if you already have an API key, you can select **Manually enter API Key** and 6. Run the `/models` command to select your deployed model. + ```txt + /models + ``` + --- ### Azure Cognitive Services @@ -241,32 +230,19 @@ Or if you already have an API key, you can select **Manually enter API Key** and The deployment name must match the model name for opencode to work properly. ::: -3. Run `opencode auth login` and select **Azure**. +3. Run the `/connect` command and search for **Azure Cognitive Services**. - ```bash - $ opencode auth login - - ┌ Add credential - │ - ◆ Select provider - │ ● Azure Cognitive Services - │ ... - └ + ```txt + /connect ``` 4. Enter your API key. - ```bash - $ opencode auth login - - ┌ Add credential + ```txt + ┌ API key │ - ◇ Select provider - │ Azure Cognitive Services │ - ◇ Enter your API key - │ _ - └ + └ enter ``` 5. Set your resource name as an environment variable: @@ -283,222 +259,172 @@ Or if you already have an API key, you can select **Manually enter API Key** and 6. Run the `/models` command to select your deployed model. + ```txt + /models + ``` + --- ### Baseten 1. Head over to the [Baseten](https://app.baseten.co/), create an account, and generate an API key. -2. Run `opencode auth login` and select **Baseten**. - - ```bash - $ opencode auth login +2. Run the `/connect` command and search for **Baseten**. - ┌ Add credential - │ - ◆ Select provider - │ ● Baseten - │ ... - └ + ```txt + /connect ``` 3. Enter your Baseten API key. - ```bash - $ opencode auth login - - ┌ Add credential + ```txt + ┌ API key │ - ◇ Select provider - │ Baseten │ - ◇ Enter your API key - │ _ - └ + └ enter ``` 4. Run the `/models` command to select a model. + ```txt + /models + ``` + --- ### Cerebras 1. Head over to the [Cerebras console](https://inference.cerebras.ai/), create an account, and generate an API key. -2. Run `opencode auth login` and select **Cerebras**. - - ```bash - $ opencode auth login +2. Run the `/connect` command and search for **Cerebras**. - ┌ Add credential - │ - ◆ Select provider - │ ● Cerebras - │ ... - └ + ```txt + /connect ``` 3. Enter your Cerebras API key. - ```bash - $ opencode auth login - - ┌ Add credential + ```txt + ┌ API key │ - ◇ Select provider - │ Cerebras │ - ◇ Enter your API key - │ _ - └ + └ enter ``` 4. Run the `/models` command to select a model like _Qwen 3 Coder 480B_. + ```txt + /models + ``` + --- ### Cortecs 1. Head over to the [Cortecs console](https://cortecs.ai/), create an account, and generate an API key. -2. Run `opencode auth login` and select **Cortecs**. +2. Run the `/connect` command and search for **Cortecs**. - ```bash - $ opencode auth login - - ┌ Add credential - │ - ◆ Select provider - │ ● Cortecs - │ ... - └ + ```txt + /connect ``` 3. Enter your Cortecs API key. - ```bash - $ opencode auth login - - ┌ Add credential + ```txt + ┌ API key │ - ◇ Select provider - │ Cortecs │ - ◇ Enter your API key - │ _ - └ + └ enter ``` 4. Run the `/models` command to select a model like _Kimi K2 Instruct_. + ```txt + /models + ``` + --- ### DeepSeek 1. Head over to the [DeepSeek console](https://platform.deepseek.com/), create an account, and click **Create new API key**. -2. Run `opencode auth login` and select **DeepSeek**. +2. Run the `/connect` command and search for **DeepSeek**. - ```bash - $ opencode auth login - - ┌ Add credential - │ - ◆ Select provider - │ ● DeepSeek - │ ... - └ + ```txt + /connect ``` 3. Enter your DeepSeek API key. - ```bash - $ opencode auth login - - ┌ Add credential + ```txt + ┌ API key │ - ◇ Select provider - │ DeepSeek │ - ◇ Enter your API key - │ _ - └ + └ enter ``` 4. Run the `/models` command to select a DeepSeek model like _DeepSeek Reasoner_. + ```txt + /models + ``` + --- ### Deep Infra 1. Head over to the [Deep Infra dashboard](https://deepinfra.com/dash), create an account, and generate an API key. -2. Run `opencode auth login` and select **Deep Infra**. - - ```bash - $ opencode auth login +2. Run the `/connect` command and search for **Deep Infra**. - ┌ Add credential - │ - ◆ Select provider - │ ● Deep Infra - │ ... - └ + ```txt + /connect ``` 3. Enter your Deep Infra API key. - ```bash - $ opencode auth login - - ┌ Add credential + ```txt + ┌ API key │ - ◇ Select provider - │ Deep Infra │ - ◇ Enter your API key - │ _ - └ + └ enter ``` 4. Run the `/models` command to select a model. + ```txt + /models + ``` + --- ### Fireworks AI 1. Head over to the [Fireworks AI console](https://app.fireworks.ai/), create an account, and click **Create API Key**. -2. Run `opencode auth login` and select **Fireworks AI**. - - ```bash - $ opencode auth login +2. Run the `/connect` command and search for **Fireworks AI**. - ┌ Add credential - │ - ◆ Select provider - │ ● Fireworks AI - │ ... - └ + ```txt + /connect ``` 3. Enter your Fireworks AI API key. - ```bash - $ opencode auth login - - ┌ Add credential + ```txt + ┌ API key │ - ◇ Select provider - │ Fireworks AI │ - ◇ Enter your API key - │ _ - └ + └ enter ``` 4. Run the `/models` command to select a model like _Kimi K2 Instruct_. + ```txt + /models + ``` + --- ### GitHub Copilot @@ -512,30 +438,30 @@ subscription](https://github.com/features/copilot/plans) to use. Some models need to be manually enabled in your [GitHub Copilot settings](https://docs.github.com/en/copilot/how-tos/use-ai-models/configure-access-to-ai-models#setup-for-individual-use). ::: -1. Run `opencode auth login` and select GitHub Copilot. +1. Run the `/connect` command and search for GitHub Copilot. - ```bash - $ opencode auth login - ┌ Add credential + ```txt + /connect + ``` +2. Navigate to [github.com/login/device](https://github.com/login/device) and enter the code. + + ```txt + ┌ Login with GitHub Copilot │ - ◇ Select provider - │ GitHub Copilot + │ https://github.com/login/device │ - ◇ ──────────────────────────────────────────────╮ - │ │ - │ Please visit: https://github.com/login/device │ - │ Enter code: 8F43-6FCF │ - │ │ - ├─────────────────────────────────────────────────╯ + │ Enter code: 8F43-6FCF │ - ◓ Waiting for authorization... + └ Waiting for authorization... ``` -2. Navigate to [github.com/login/device](https://github.com/login/device) and enter the code. - 3. Now run the `/models` command to select the model you want. + ```txt + /models + ``` + --- ### Google Vertex AI @@ -576,42 +502,37 @@ The `global` region improves availability and reduces errors at no extra cost. U 3. Run the `/models` command to select the model you want. + ```txt + /models + ``` + --- ### Groq 1. Head over to the [Groq console](https://console.groq.com/), click **Create API Key**, and copy the key. -2. Run `opencode auth login` and select Groq. +2. Run the `/connect` command and search for Groq. - ```bash - $ opencode auth login - - ┌ Add credential - │ - ◆ Select provider - │ ● Groq - │ ... - └ + ```txt + /connect ``` 3. Enter the API key for the provider. - ```bash - $ opencode auth login - - ┌ Add credential + ```txt + ┌ API key │ - ◇ Select provider - │ Groq │ - ◇ Enter your API key - │ _ - └ + └ enter ``` 4. Run the `/models` command to select the one you want. + ```txt + /models + ``` + --- ### Hugging Face @@ -620,36 +541,27 @@ The `global` region improves availability and reduces errors at no extra cost. U 1. Head over to [Hugging Face settings](https://huggingface.co/settings/tokens/new?ownUserPermissions=inference.serverless.write&tokenType=fineGrained) to create a token with permission to make calls to Inference Providers. -2. Run `opencode auth login` and select **Hugging Face**. - - ```bash - $ opencode auth login +2. Run the `/connect` command and search for **Hugging Face**. - ┌ Add credential - │ - ◆ Select provider - │ ● Hugging Face - │ ... - └ + ```txt + /connect ``` 3. Enter your Hugging Face token. - ```bash - $ opencode auth login - - ┌ Add credential + ```txt + ┌ API key │ - ◇ Select provider - │ Hugging Face │ - ◇ Enter your API key - │ _ - └ + └ enter ``` 4. Run the `/models` command to select a model like _Kimi-K2-Instruct_ or _GLM-4.6_. + ```txt + /models + ``` + --- ### llama.cpp @@ -696,36 +608,27 @@ IO.NET offers 17 models optimized for various use cases: 1. Head over to the [IO.NET console](https://ai.io.net/), create an account, and generate an API key. -2. Run `opencode auth login` and select **IO.NET**. - - ```bash - $ opencode auth login +2. Run the `/connect` command and search for **IO.NET**. - ┌ Add credential - │ - ◆ Select provider - │ ● IO.NET - │ ... - └ + ```txt + /connect ``` 3. Enter your IO.NET API key. - ```bash - $ opencode auth login - - ┌ Add credential + ```txt + ┌ API key │ - ◇ Select provider - │ IO.NET │ - ◇ Enter your API key - │ _ - └ + └ enter ``` 4. Run the `/models` command to select a model. + ```txt + /models + ``` + --- ### LM Studio @@ -768,36 +671,27 @@ To use Kimi K2 from Moonshot AI: 1. Head over to the [Moonshot AI console](https://platform.moonshot.ai/console), create an account, and click **Create API key**. -2. Run `opencode auth login` and select **Moonshot AI**. - - ```bash - $ opencode auth login +2. Run the `/connect` command and search for **Moonshot AI**. - ┌ Add credential - │ - ◆ Select provider - │ ... - │ ● Moonshot AI - └ + ```txt + /connect ``` 3. Enter your Moonshot API key. - ```bash - $ opencode auth login - - ┌ Add credential + ```txt + ┌ API key │ - ◇ Select provider - │ Moonshot AI │ - ◇ Enter your API key - │ _ - └ + └ enter ``` 4. Run the `/models` command to select _Kimi K2_. + ```txt + /models + ``` + --- ### Ollama @@ -848,32 +742,19 @@ To use Ollama Cloud with OpenCode: 3. Copy the API key for use in OpenCode. -4. Run `opencode auth login` and select **Ollama Cloud**. +4. Run the `/connect` command and search for **Ollama Cloud**. - ```bash - $ opencode auth login - - ┌ Add credential - │ - ◆ Select provider - │ ● Ollama Cloud - │ ... - └ + ```txt + /connect ``` 5. Enter your Ollama Cloud API key. - ```bash - $ opencode auth login - - ┌ Add credential + ```txt + ┌ API key │ - ◇ Select provider - │ Ollama Cloud │ - ◇ Enter your API key - │ _ - └ + └ enter ``` 6. **Important**: Before using cloud models in OpenCode, you must pull the model information locally: @@ -884,42 +765,37 @@ To use Ollama Cloud with OpenCode: 7. Run the `/models` command to select your Ollama Cloud model. + ```txt + /models + ``` + --- ### OpenAI 1. Head over to the [OpenAI Platform console](https://platform.openai.com/api-keys), click **Create new secret key**, and copy the key. -2. Run `opencode auth login` and select OpenAI. - - ```bash - $ opencode auth login +2. Run the `/connect` command and search for OpenAI. - ┌ Add credential - │ - ◆ Select provider - │ ● OpenAI - │ ... - └ + ```txt + /connect ``` 3. Enter the API key for the provider. - ```bash - $ opencode auth login - - ┌ Add credential + ```txt + ┌ API key │ - ◇ Select provider - │ OpenAI │ - ◇ Enter your API key - │ _ - └ + └ enter ``` 4. Run the `/models` command to select the one you want. + ```txt + /models + ``` + --- ### OpenCode Zen @@ -928,74 +804,54 @@ OpenCode Zen is a list of tested and verified models provided by the OpenCode te 1. Sign in to **OpenCode Zen** and click **Create API Key**. -2. Run `opencode auth login` and select **OpenCode Zen**. - - ```bash - $ opencode auth login +2. Run the `/connect` command and search for **OpenCode Zen**. - ┌ Add credential - │ - ◆ Select provider - │ ● OpenCode Zen - │ ... - └ + ```txt + /connect ``` 3. Enter your OpenCode API key. - ```bash - $ opencode auth login - - ┌ Add credential + ```txt + ┌ API key │ - ◇ Select provider - │ OpenCode Zen │ - ◇ Enter your API key - │ _ - └ + └ enter ``` 4. Run the `/models` command to select a model like _Qwen 3 Coder 480B_. + ```txt + /models + ``` + --- ### OpenRouter 1. Head over to the [OpenRouter dashboard](https://openrouter.ai/settings/keys), click **Create API Key**, and copy the key. -2. Run `opencode auth login` and select OpenRouter. - - ```bash - $ opencode auth login +2. Run the `/connect` command and search for OpenRouter. - ┌ Add credential - │ - ◆ Select provider - │ ● OpenRouter - │ ○ Anthropic - │ ○ Google - │ ... - └ + ```txt + /connect ``` 3. Enter the API key for the provider. - ```bash - $ opencode auth login - - ┌ Add credential + ```txt + ┌ API key │ - ◇ Select provider - │ OpenRouter │ - ◇ Enter your API key - │ _ - └ + └ enter ``` 4. Many OpenRouter models are preloaded by default, run the `/models` command to select the one you want. + ```txt + /models + ``` + You can also add additional models through your opencode config. ```json title="opencode.json" {6} @@ -1039,176 +895,164 @@ OpenCode Zen is a list of tested and verified models provided by the OpenCode te 1. Head over to the [OVHcloud panel](https://ovh.com/manager). Navigate to the `Public Cloud` section, `AI & Machine Learning` > `AI Endpoints` and in `API Keys` tab, click **Create a new API key**. -2. Run `opencode auth login` and select **OVHcloud AI Endpoints**. +2. Run the `/connect` command and search for **OVHcloud AI Endpoints**. - ```bash - $ opencode auth login - - ┌ Add credential - │ - ◆ Select provider - │ ● OVHcloud AI Endpoints - │ ... - └ + ```txt + /connect ``` 3. Enter your OVHcloud AI Endpoints API key. - ```bash - $ opencode auth login - - ┌ Add credential + ```txt + ┌ API key │ - ◇ Select provider - │ OVHcloud AI Endpoints │ - ◇ Enter your API key - │ _ - └ + └ enter ``` 4. Run the `/models` command to select a model like _gpt-oss-120b_. + ```txt + /models + ``` + --- ### Together AI 1. Head over to the [Together AI console](https://api.together.ai), create an account, and click **Add Key**. -2. Run `opencode auth login` and select **Together AI**. +2. Run the `/connect` command and search for **Together AI**. - ```bash - $ opencode auth login - - ┌ Add credential - │ - ◆ Select provider - │ ● Together AI - │ ... - └ + ```txt + /connect ``` 3. Enter your Together AI API key. - ```bash - $ opencode auth login - - ┌ Add credential + ```txt + ┌ API key │ - ◇ Select provider - │ Together AI │ - ◇ Enter your API key - │ _ - └ + └ enter ``` 4. Run the `/models` command to select a model like _Kimi K2 Instruct_. + ```txt + /models + ``` + --- -### xAI +### Venice AI -For a limited time, you can use xAI's Grok Code for free with opencode. +1. Head over to the [Venice AI console](https://venice.ai), create an account, and generate an API key. -:::tip -Grok Code is available for free for a limited time on opencode. -::: +2. Run the `/connect` command and search for **Venice AI**. + + ```txt + /connect + ``` -1. Make sure you are on the latest version of opencode. +3. Enter your Venice AI API key. + + ```txt + ┌ API key + │ + │ + └ enter + ``` -2. Run the `/models` command and select **Grok Code Free**. +4. Run the `/models` command to select a model like _Llama 3.3 70B_. -As a part of the trial period, the xAI team will be using the request logs to -monitor and improve Grok Code. + ```txt + /models + ``` --- -### Z.AI +### xAI -1. Head over to the [Z.AI API console](https://z.ai/manage-apikey/apikey-list), create an account, and click **Create a new API key**. +1. Head over to the [xAI console](https://console.x.ai/), create an account, and generate an API key. -2. Run `opencode auth login` and select **Z.AI**. +2. Run the `/connect` command and search for **xAI**. - ```bash - $ opencode auth login + ```txt + /connect + ``` - ┌ Add credential +3. Enter your xAI API key. + + ```txt + ┌ API key │ - ◆ Select provider - │ ● Z.AI - │ ... - └ + │ + └ enter ``` - If you are subscribed to the **GLM Coding Plan**, select **Z.AI Coding Plan**. +4. Run the `/models` command to select a model like _Grok Beta_. - ```bash - $ opencode auth login + ```txt + /models + ``` - ┌ Add credential - │ - ◆ Select provider - │ ● Z.AI Coding Plan - │ ... - └ +--- + +### Z.AI + +1. Head over to the [Z.AI API console](https://z.ai/manage-apikey/apikey-list), create an account, and click **Create a new API key**. + +2. Run the `/connect` command and search for **Z.AI**. + + ```txt + /connect ``` -3. Enter your Z.AI API key. + If you are subscribed to the **GLM Coding Plan**, select **Z.AI Coding Plan**. - ```bash - $ opencode auth login +3. Enter your Z.AI API key. - ┌ Add credential + ```txt + ┌ API key │ - ◇ Select provider - │ Z.AI │ - ◇ Enter your API key - │ _ - └ + └ enter ``` 4. Run the `/models` command to select a model like _GLM-4.5_. + ```txt + /models + ``` + --- ### ZenMux 1. Head over to the [ZenMux dashboard](https://zenmux.ai/settings/keys), click **Create API Key**, and copy the key. -2. Run `opencode auth login` and select ZenMux. - - ```bash - $ opencode auth login +2. Run the `/connect` command and search for ZenMux. - ┌ Add credential - │ - ◆ Select provider - │ ● ZenMux - │ ○ Zhipu AI - │ ○ Zhipu AI Coding Plan - │ ... - └ + ```txt + /connect ``` 3. Enter the API key for the provider. - ```bash - $ opencode auth login - - ┌ Add credential + ```txt + ┌ API key │ - ◇ Select provider - │ ZenMux │ - ◇ Enter your API key - │ _ - └ + └ enter ``` 4. Many ZenMux models are preloaded by default, run the `/models` command to select the one you want. + ```txt + /models + ``` + You can also add additional models through your opencode config. ```json title="opencode.json" {6} @@ -1228,16 +1072,16 @@ monitor and improve Grok Code. ## Custom provider -To add any **OpenAI-compatible** provider that's not listed in `opencode auth login`: +To add any **OpenAI-compatible** provider that's not listed in the `/connect` command: :::tip You can use any OpenAI-compatible provider with opencode. Most modern AI providers offer OpenAI-compatible APIs. ::: -1. Run `opencode auth login` and scroll down to **Other**. +1. Run the `/connect` command and scroll down to **Other**. ```bash - $ opencode auth login + $ /connect ┌ Add credential │ @@ -1250,7 +1094,7 @@ You can use any OpenAI-compatible provider with opencode. Most modern AI provide 2. Enter a unique ID for the provider. ```bash - $ opencode auth login + $ /connect ┌ Add credential │ @@ -1266,11 +1110,11 @@ You can use any OpenAI-compatible provider with opencode. Most modern AI provide 3. Enter your API key for the provider. ```bash - $ opencode auth login + $ /connect ┌ Add credential │ - ▲ This only stores a credential for myprovider - you will need configure it in opencode.json, check the docs for examples. + ▲ This only stores a credential for myprovider - you will need to configure it in opencode.json, check the docs for examples. │ ◇ Enter your API key │ sk-... @@ -1366,42 +1210,6 @@ If you are having trouble with configuring a provider, check the following: This doesn't apply to providers like Amazon Bedrock, that rely on environment variables for their auth. 2. For custom providers, check the opencode config and: - - Make sure the provider ID used in `opencode auth login` matches the ID in your opencode config. + - Make sure the provider ID used in the `/connect` command matches the ID in your opencode config. - The right npm package is used for the provider. For example, use `@ai-sdk/cerebras` for Cerebras. And for all other OpenAI-compatible providers, use `@ai-sdk/openai-compatible`. - Check correct API endpoint is used in the `options.baseURL` field. - ---- - -### Venice AI - -1. Head over to the [Venice AI console](https://venice.ai), create an account, and generate an API key. - -2. Run `opencode auth login` and select **Venice AI**. - - ```bash - $ opencode auth login - - ┌ Add credential - │ - ◆ Select provider - │ ● Venice AI - │ ... - └ - ``` - -3. Enter your Venice AI API key. - - ```bash - $ opencode auth login - - ┌ Add credential - │ - ◇ Select provider - │ Venice AI - │ - ◇ Enter your API key - │ _ - └ - ``` - -4. Run the `/models` command to select a model like _Llama 3.3 70B_. diff --git a/packages/web/src/content/docs/troubleshooting.mdx b/packages/web/src/content/docs/troubleshooting.mdx index d38b892fc5f..e3476887f47 100644 --- a/packages/web/src/content/docs/troubleshooting.mdx +++ b/packages/web/src/content/docs/troubleshooting.mdx @@ -64,7 +64,7 @@ Here are some common issues and how to resolve them. --- -### opencode won't start +### OpenCode won't start 1. Check the logs for error messages 2. Try running with `--print-logs` to see output in the terminal @@ -74,7 +74,7 @@ Here are some common issues and how to resolve them. ### Authentication issues -1. Try re-authenticating with `opencode auth login ` +1. Try re-authenticating with the `/connect` command in the TUI 2. Check that your API keys are valid 3. Ensure your network allows connections to the provider's API @@ -113,10 +113,7 @@ To resolve this: rm -rf ~/.local/share/opencode ``` -3. Re-authenticate with your provider: - ```bash - opencode auth login - ``` +3. Re-authenticate with your provider using the `/connect` command in the TUI. --- diff --git a/packages/web/src/content/docs/tui.mdx b/packages/web/src/content/docs/tui.mdx index 2543df639b2..83b5cd79869 100644 --- a/packages/web/src/content/docs/tui.mdx +++ b/packages/web/src/content/docs/tui.mdx @@ -69,6 +69,16 @@ Here are all available slash commands: --- +### connect + +Add a provider to OpenCode. Allows you to select from available providers and add their API keys. + +```bash frame="none" +/connect +``` + +--- + ### compact Compact the current session. _Alias_: `/summarize` diff --git a/packages/web/src/content/docs/zen.mdx b/packages/web/src/content/docs/zen.mdx index 5632bcca45c..5f266b0c239 100644 --- a/packages/web/src/content/docs/zen.mdx +++ b/packages/web/src/content/docs/zen.mdx @@ -51,7 +51,7 @@ OpenCode Zen works like any other provider in OpenCode. 1. You sign in to **OpenCode Zen**, add your billing details, and copy your API key. -2. You run `opencode auth login`, select opencode, and paste your API key. +2. You run the `/connect` command in the TUI, select OpenCode Zen, and paste your API key. 3. Run `/models` in the TUI to see the list of models we recommend. You are charged per request and you can add credits to your account. From d40feafb016d1443ff61578c98e2647ebcc5fe40 Mon Sep 17 00:00:00 2001 From: Jay V Date: Tue, 2 Dec 2025 18:09:16 -0500 Subject: [PATCH 09/26] ignore: commands --- .opencode/command/commit.md | 2 +- .opencode/command/issues.md | 2 +- .opencode/command/spellcheck.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.opencode/command/commit.md b/.opencode/command/commit.md index 570bc7f6a69..46673d95a13 100644 --- a/.opencode/command/commit.md +++ b/.opencode/command/commit.md @@ -1,5 +1,5 @@ --- -description: Git commit and push +description: git commit and push --- commit and push diff --git a/.opencode/command/issues.md b/.opencode/command/issues.md index 793dce6517f..20ac4c18024 100644 --- a/.opencode/command/issues.md +++ b/.opencode/command/issues.md @@ -1,5 +1,5 @@ --- -description: "Find issue(s) on github" +description: "find issue(s) on github" model: opencode/claude-haiku-4-5 --- diff --git a/.opencode/command/spellcheck.md b/.opencode/command/spellcheck.md index afa1970b779..0abf23c4fd0 100644 --- a/.opencode/command/spellcheck.md +++ b/.opencode/command/spellcheck.md @@ -1,5 +1,5 @@ --- -description: Spellcheck all markdown file changes +description: spellcheck all markdown file changes --- Look at all the unstaged changes to markdown (.md, .mdx) files, pull out the lines that have changed, and check for spelling and grammar errors. From bcfa63aa4e247f023e2c1ad156df074d362f7e4d Mon Sep 17 00:00:00 2001 From: Dalton Alexandre <166029845+dl-alexandre@users.noreply.github.com> Date: Tue, 2 Dec 2025 15:15:12 -0800 Subject: [PATCH 10/26] fix: allow unignoring files in .ignore (#4814) --- packages/opencode/src/file/index.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/opencode/src/file/index.ts b/packages/opencode/src/file/index.ts index aae7061c17a..51934a2356d 100644 --- a/packages/opencode/src/file/index.ts +++ b/packages/opencode/src/file/index.ts @@ -276,11 +276,16 @@ export namespace File { const project = Instance.project let ignored = (_: string) => false if (project.vcs === "git") { + const ig = ignore() const gitignore = Bun.file(path.join(Instance.worktree, ".gitignore")) if (await gitignore.exists()) { - const ig = ignore().add(await gitignore.text()) - ignored = ig.ignores.bind(ig) + ig.add(await gitignore.text()) } + const ignoreFile = Bun.file(path.join(Instance.worktree, ".ignore")) + if (await ignoreFile.exists()) { + ig.add(await ignoreFile.text()) + } + ignored = ig.ignores.bind(ig) } const resolved = dir ? path.join(Instance.directory, dir) : Instance.directory const nodes: Node[] = [] From 28c802f39949d512a56ad8c0596c294ff6fe9e66 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 2 Dec 2025 18:36:13 -0500 Subject: [PATCH 11/26] wip: zen --- .prettierignore | 1 + github/sst-env.d.ts | 2 +- infra/console.ts | 1 - packages/console/app/sst-env.d.ts | 2 +- packages/console/core/sst-env.d.ts | 235 ++++++++++++------------- packages/console/function/sst-env.d.ts | 235 ++++++++++++------------- packages/console/mail/sst-env.d.ts | 2 +- packages/console/resource/sst-env.d.ts | 235 ++++++++++++------------- packages/desktop/src/sst-env.d.ts | 6 +- packages/desktop/sst-env.d.ts | 2 +- packages/enterprise/sst-env.d.ts | 235 ++++++++++++------------- packages/function/sst-env.d.ts | 235 ++++++++++++------------- packages/opencode/sst-env.d.ts | 2 +- packages/plugin/sst-env.d.ts | 2 +- packages/script/sst-env.d.ts | 2 +- packages/sdk/js/sst-env.d.ts | 2 +- packages/sdk/python/sst.pyi | 3 - packages/slack/sst-env.d.ts | 2 +- packages/tauri/sst-env.d.ts | 2 +- packages/ui/sst-env.d.ts | 2 +- packages/util/sst-env.d.ts | 2 +- packages/web/sst-env.d.ts | 2 +- sdks/vscode/sst-env.d.ts | 2 +- sst-env.d.ts | 234 ++++++++++++------------ 24 files changed, 719 insertions(+), 729 deletions(-) create mode 100644 .prettierignore diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000000..aa3a7ce2381 --- /dev/null +++ b/.prettierignore @@ -0,0 +1 @@ +sst-env.d.ts \ No newline at end of file diff --git a/github/sst-env.d.ts b/github/sst-env.d.ts index 6b69016e718..f742a120044 100644 --- a/github/sst-env.d.ts +++ b/github/sst-env.d.ts @@ -6,4 +6,4 @@ /// import "sst" -export {} +export {} \ No newline at end of file diff --git a/infra/console.ts b/infra/console.ts index e090cd90a91..0a98ab07235 100644 --- a/infra/console.ts +++ b/infra/console.ts @@ -116,7 +116,6 @@ const gatewayKv = new sst.cloudflare.Kv("GatewayKv") // CONSOLE //////////////// -const oldBucket = new sst.cloudflare.Bucket("ConsoleData") const bucket = new sst.cloudflare.Bucket("ZenData") const AWS_SES_ACCESS_KEY_ID = new sst.Secret("AWS_SES_ACCESS_KEY_ID") diff --git a/packages/console/app/sst-env.d.ts b/packages/console/app/sst-env.d.ts index bd558821739..9b9de73273f 100644 --- a/packages/console/app/sst-env.d.ts +++ b/packages/console/app/sst-env.d.ts @@ -6,4 +6,4 @@ /// import "sst" -export {} +export {} \ No newline at end of file diff --git a/packages/console/core/sst-env.d.ts b/packages/console/core/sst-env.d.ts index 91566bf6efc..0b09bfd0cd8 100644 --- a/packages/console/core/sst-env.d.ts +++ b/packages/console/core/sst-env.d.ts @@ -6,131 +6,130 @@ import "sst" declare module "sst" { export interface Resource { - ADMIN_SECRET: { - type: "sst.sst.Secret" - value: string - } - AUTH_API_URL: { - type: "sst.sst.Linkable" - value: string - } - AWS_SES_ACCESS_KEY_ID: { - type: "sst.sst.Secret" - value: string - } - AWS_SES_SECRET_ACCESS_KEY: { - type: "sst.sst.Secret" - value: string - } - CLOUDFLARE_API_TOKEN: { - type: "sst.sst.Secret" - value: string - } - CLOUDFLARE_DEFAULT_ACCOUNT_ID: { - type: "sst.sst.Secret" - value: string - } - Console: { - type: "sst.cloudflare.SolidStart" - url: string - } - Database: { - database: string - host: string - password: string - port: number - type: "sst.sst.Linkable" - username: string - } - Desktop: { - type: "sst.cloudflare.StaticSite" - url: string - } - EMAILOCTOPUS_API_KEY: { - type: "sst.sst.Secret" - value: string - } - Enterprise: { - type: "sst.cloudflare.SolidStart" - url: string - } - GITHUB_APP_ID: { - type: "sst.sst.Secret" - value: string - } - GITHUB_APP_PRIVATE_KEY: { - type: "sst.sst.Secret" - value: string - } - GITHUB_CLIENT_ID_CONSOLE: { - type: "sst.sst.Secret" - value: string - } - GITHUB_CLIENT_SECRET_CONSOLE: { - type: "sst.sst.Secret" - value: string - } - GOOGLE_CLIENT_ID: { - type: "sst.sst.Secret" - value: string - } - HONEYCOMB_API_KEY: { - type: "sst.sst.Secret" - value: string - } - R2AccessKey: { - type: "sst.sst.Secret" - value: string - } - R2SecretKey: { - type: "sst.sst.Secret" - value: string - } - STRIPE_SECRET_KEY: { - type: "sst.sst.Secret" - value: string - } - STRIPE_WEBHOOK_SECRET: { - type: "sst.sst.Linkable" - value: string - } - Web: { - type: "sst.cloudflare.Astro" - url: string - } - ZEN_MODELS1: { - type: "sst.sst.Secret" - value: string - } - ZEN_MODELS2: { - type: "sst.sst.Secret" - value: string - } - ZEN_MODELS3: { - type: "sst.sst.Secret" - value: string + "ADMIN_SECRET": { + "type": "sst.sst.Secret" + "value": string + } + "AUTH_API_URL": { + "type": "sst.sst.Linkable" + "value": string + } + "AWS_SES_ACCESS_KEY_ID": { + "type": "sst.sst.Secret" + "value": string + } + "AWS_SES_SECRET_ACCESS_KEY": { + "type": "sst.sst.Secret" + "value": string + } + "CLOUDFLARE_API_TOKEN": { + "type": "sst.sst.Secret" + "value": string + } + "CLOUDFLARE_DEFAULT_ACCOUNT_ID": { + "type": "sst.sst.Secret" + "value": string + } + "Console": { + "type": "sst.cloudflare.SolidStart" + "url": string + } + "Database": { + "database": string + "host": string + "password": string + "port": number + "type": "sst.sst.Linkable" + "username": string + } + "Desktop": { + "type": "sst.cloudflare.StaticSite" + "url": string + } + "EMAILOCTOPUS_API_KEY": { + "type": "sst.sst.Secret" + "value": string + } + "Enterprise": { + "type": "sst.cloudflare.SolidStart" + "url": string + } + "GITHUB_APP_ID": { + "type": "sst.sst.Secret" + "value": string + } + "GITHUB_APP_PRIVATE_KEY": { + "type": "sst.sst.Secret" + "value": string + } + "GITHUB_CLIENT_ID_CONSOLE": { + "type": "sst.sst.Secret" + "value": string + } + "GITHUB_CLIENT_SECRET_CONSOLE": { + "type": "sst.sst.Secret" + "value": string + } + "GOOGLE_CLIENT_ID": { + "type": "sst.sst.Secret" + "value": string + } + "HONEYCOMB_API_KEY": { + "type": "sst.sst.Secret" + "value": string + } + "R2AccessKey": { + "type": "sst.sst.Secret" + "value": string + } + "R2SecretKey": { + "type": "sst.sst.Secret" + "value": string + } + "STRIPE_SECRET_KEY": { + "type": "sst.sst.Secret" + "value": string + } + "STRIPE_WEBHOOK_SECRET": { + "type": "sst.sst.Linkable" + "value": string + } + "Web": { + "type": "sst.cloudflare.Astro" + "url": string + } + "ZEN_MODELS1": { + "type": "sst.sst.Secret" + "value": string + } + "ZEN_MODELS2": { + "type": "sst.sst.Secret" + "value": string + } + "ZEN_MODELS3": { + "type": "sst.sst.Secret" + "value": string } - ZEN_MODELS4: { - type: "sst.sst.Secret" - value: string + "ZEN_MODELS4": { + "type": "sst.sst.Secret" + "value": string } } } -// cloudflare -import * as cloudflare from "@cloudflare/workers-types" +// cloudflare +import * as cloudflare from "@cloudflare/workers-types"; declare module "sst" { export interface Resource { - Api: cloudflare.Service - AuthApi: cloudflare.Service - AuthStorage: cloudflare.KVNamespace - Bucket: cloudflare.R2Bucket - ConsoleData: cloudflare.R2Bucket - EnterpriseStorage: cloudflare.R2Bucket - GatewayKv: cloudflare.KVNamespace - LogProcessor: cloudflare.Service - ZenData: cloudflare.R2Bucket + "Api": cloudflare.Service + "AuthApi": cloudflare.Service + "AuthStorage": cloudflare.KVNamespace + "Bucket": cloudflare.R2Bucket + "EnterpriseStorage": cloudflare.R2Bucket + "GatewayKv": cloudflare.KVNamespace + "LogProcessor": cloudflare.Service + "ZenData": cloudflare.R2Bucket } } import "sst" -export {} +export {} \ No newline at end of file diff --git a/packages/console/function/sst-env.d.ts b/packages/console/function/sst-env.d.ts index 91566bf6efc..0b09bfd0cd8 100644 --- a/packages/console/function/sst-env.d.ts +++ b/packages/console/function/sst-env.d.ts @@ -6,131 +6,130 @@ import "sst" declare module "sst" { export interface Resource { - ADMIN_SECRET: { - type: "sst.sst.Secret" - value: string - } - AUTH_API_URL: { - type: "sst.sst.Linkable" - value: string - } - AWS_SES_ACCESS_KEY_ID: { - type: "sst.sst.Secret" - value: string - } - AWS_SES_SECRET_ACCESS_KEY: { - type: "sst.sst.Secret" - value: string - } - CLOUDFLARE_API_TOKEN: { - type: "sst.sst.Secret" - value: string - } - CLOUDFLARE_DEFAULT_ACCOUNT_ID: { - type: "sst.sst.Secret" - value: string - } - Console: { - type: "sst.cloudflare.SolidStart" - url: string - } - Database: { - database: string - host: string - password: string - port: number - type: "sst.sst.Linkable" - username: string - } - Desktop: { - type: "sst.cloudflare.StaticSite" - url: string - } - EMAILOCTOPUS_API_KEY: { - type: "sst.sst.Secret" - value: string - } - Enterprise: { - type: "sst.cloudflare.SolidStart" - url: string - } - GITHUB_APP_ID: { - type: "sst.sst.Secret" - value: string - } - GITHUB_APP_PRIVATE_KEY: { - type: "sst.sst.Secret" - value: string - } - GITHUB_CLIENT_ID_CONSOLE: { - type: "sst.sst.Secret" - value: string - } - GITHUB_CLIENT_SECRET_CONSOLE: { - type: "sst.sst.Secret" - value: string - } - GOOGLE_CLIENT_ID: { - type: "sst.sst.Secret" - value: string - } - HONEYCOMB_API_KEY: { - type: "sst.sst.Secret" - value: string - } - R2AccessKey: { - type: "sst.sst.Secret" - value: string - } - R2SecretKey: { - type: "sst.sst.Secret" - value: string - } - STRIPE_SECRET_KEY: { - type: "sst.sst.Secret" - value: string - } - STRIPE_WEBHOOK_SECRET: { - type: "sst.sst.Linkable" - value: string - } - Web: { - type: "sst.cloudflare.Astro" - url: string - } - ZEN_MODELS1: { - type: "sst.sst.Secret" - value: string - } - ZEN_MODELS2: { - type: "sst.sst.Secret" - value: string - } - ZEN_MODELS3: { - type: "sst.sst.Secret" - value: string + "ADMIN_SECRET": { + "type": "sst.sst.Secret" + "value": string + } + "AUTH_API_URL": { + "type": "sst.sst.Linkable" + "value": string + } + "AWS_SES_ACCESS_KEY_ID": { + "type": "sst.sst.Secret" + "value": string + } + "AWS_SES_SECRET_ACCESS_KEY": { + "type": "sst.sst.Secret" + "value": string + } + "CLOUDFLARE_API_TOKEN": { + "type": "sst.sst.Secret" + "value": string + } + "CLOUDFLARE_DEFAULT_ACCOUNT_ID": { + "type": "sst.sst.Secret" + "value": string + } + "Console": { + "type": "sst.cloudflare.SolidStart" + "url": string + } + "Database": { + "database": string + "host": string + "password": string + "port": number + "type": "sst.sst.Linkable" + "username": string + } + "Desktop": { + "type": "sst.cloudflare.StaticSite" + "url": string + } + "EMAILOCTOPUS_API_KEY": { + "type": "sst.sst.Secret" + "value": string + } + "Enterprise": { + "type": "sst.cloudflare.SolidStart" + "url": string + } + "GITHUB_APP_ID": { + "type": "sst.sst.Secret" + "value": string + } + "GITHUB_APP_PRIVATE_KEY": { + "type": "sst.sst.Secret" + "value": string + } + "GITHUB_CLIENT_ID_CONSOLE": { + "type": "sst.sst.Secret" + "value": string + } + "GITHUB_CLIENT_SECRET_CONSOLE": { + "type": "sst.sst.Secret" + "value": string + } + "GOOGLE_CLIENT_ID": { + "type": "sst.sst.Secret" + "value": string + } + "HONEYCOMB_API_KEY": { + "type": "sst.sst.Secret" + "value": string + } + "R2AccessKey": { + "type": "sst.sst.Secret" + "value": string + } + "R2SecretKey": { + "type": "sst.sst.Secret" + "value": string + } + "STRIPE_SECRET_KEY": { + "type": "sst.sst.Secret" + "value": string + } + "STRIPE_WEBHOOK_SECRET": { + "type": "sst.sst.Linkable" + "value": string + } + "Web": { + "type": "sst.cloudflare.Astro" + "url": string + } + "ZEN_MODELS1": { + "type": "sst.sst.Secret" + "value": string + } + "ZEN_MODELS2": { + "type": "sst.sst.Secret" + "value": string + } + "ZEN_MODELS3": { + "type": "sst.sst.Secret" + "value": string } - ZEN_MODELS4: { - type: "sst.sst.Secret" - value: string + "ZEN_MODELS4": { + "type": "sst.sst.Secret" + "value": string } } } -// cloudflare -import * as cloudflare from "@cloudflare/workers-types" +// cloudflare +import * as cloudflare from "@cloudflare/workers-types"; declare module "sst" { export interface Resource { - Api: cloudflare.Service - AuthApi: cloudflare.Service - AuthStorage: cloudflare.KVNamespace - Bucket: cloudflare.R2Bucket - ConsoleData: cloudflare.R2Bucket - EnterpriseStorage: cloudflare.R2Bucket - GatewayKv: cloudflare.KVNamespace - LogProcessor: cloudflare.Service - ZenData: cloudflare.R2Bucket + "Api": cloudflare.Service + "AuthApi": cloudflare.Service + "AuthStorage": cloudflare.KVNamespace + "Bucket": cloudflare.R2Bucket + "EnterpriseStorage": cloudflare.R2Bucket + "GatewayKv": cloudflare.KVNamespace + "LogProcessor": cloudflare.Service + "ZenData": cloudflare.R2Bucket } } import "sst" -export {} +export {} \ No newline at end of file diff --git a/packages/console/mail/sst-env.d.ts b/packages/console/mail/sst-env.d.ts index bd558821739..9b9de73273f 100644 --- a/packages/console/mail/sst-env.d.ts +++ b/packages/console/mail/sst-env.d.ts @@ -6,4 +6,4 @@ /// import "sst" -export {} +export {} \ No newline at end of file diff --git a/packages/console/resource/sst-env.d.ts b/packages/console/resource/sst-env.d.ts index 91566bf6efc..0b09bfd0cd8 100644 --- a/packages/console/resource/sst-env.d.ts +++ b/packages/console/resource/sst-env.d.ts @@ -6,131 +6,130 @@ import "sst" declare module "sst" { export interface Resource { - ADMIN_SECRET: { - type: "sst.sst.Secret" - value: string - } - AUTH_API_URL: { - type: "sst.sst.Linkable" - value: string - } - AWS_SES_ACCESS_KEY_ID: { - type: "sst.sst.Secret" - value: string - } - AWS_SES_SECRET_ACCESS_KEY: { - type: "sst.sst.Secret" - value: string - } - CLOUDFLARE_API_TOKEN: { - type: "sst.sst.Secret" - value: string - } - CLOUDFLARE_DEFAULT_ACCOUNT_ID: { - type: "sst.sst.Secret" - value: string - } - Console: { - type: "sst.cloudflare.SolidStart" - url: string - } - Database: { - database: string - host: string - password: string - port: number - type: "sst.sst.Linkable" - username: string - } - Desktop: { - type: "sst.cloudflare.StaticSite" - url: string - } - EMAILOCTOPUS_API_KEY: { - type: "sst.sst.Secret" - value: string - } - Enterprise: { - type: "sst.cloudflare.SolidStart" - url: string - } - GITHUB_APP_ID: { - type: "sst.sst.Secret" - value: string - } - GITHUB_APP_PRIVATE_KEY: { - type: "sst.sst.Secret" - value: string - } - GITHUB_CLIENT_ID_CONSOLE: { - type: "sst.sst.Secret" - value: string - } - GITHUB_CLIENT_SECRET_CONSOLE: { - type: "sst.sst.Secret" - value: string - } - GOOGLE_CLIENT_ID: { - type: "sst.sst.Secret" - value: string - } - HONEYCOMB_API_KEY: { - type: "sst.sst.Secret" - value: string - } - R2AccessKey: { - type: "sst.sst.Secret" - value: string - } - R2SecretKey: { - type: "sst.sst.Secret" - value: string - } - STRIPE_SECRET_KEY: { - type: "sst.sst.Secret" - value: string - } - STRIPE_WEBHOOK_SECRET: { - type: "sst.sst.Linkable" - value: string - } - Web: { - type: "sst.cloudflare.Astro" - url: string - } - ZEN_MODELS1: { - type: "sst.sst.Secret" - value: string - } - ZEN_MODELS2: { - type: "sst.sst.Secret" - value: string - } - ZEN_MODELS3: { - type: "sst.sst.Secret" - value: string + "ADMIN_SECRET": { + "type": "sst.sst.Secret" + "value": string + } + "AUTH_API_URL": { + "type": "sst.sst.Linkable" + "value": string + } + "AWS_SES_ACCESS_KEY_ID": { + "type": "sst.sst.Secret" + "value": string + } + "AWS_SES_SECRET_ACCESS_KEY": { + "type": "sst.sst.Secret" + "value": string + } + "CLOUDFLARE_API_TOKEN": { + "type": "sst.sst.Secret" + "value": string + } + "CLOUDFLARE_DEFAULT_ACCOUNT_ID": { + "type": "sst.sst.Secret" + "value": string + } + "Console": { + "type": "sst.cloudflare.SolidStart" + "url": string + } + "Database": { + "database": string + "host": string + "password": string + "port": number + "type": "sst.sst.Linkable" + "username": string + } + "Desktop": { + "type": "sst.cloudflare.StaticSite" + "url": string + } + "EMAILOCTOPUS_API_KEY": { + "type": "sst.sst.Secret" + "value": string + } + "Enterprise": { + "type": "sst.cloudflare.SolidStart" + "url": string + } + "GITHUB_APP_ID": { + "type": "sst.sst.Secret" + "value": string + } + "GITHUB_APP_PRIVATE_KEY": { + "type": "sst.sst.Secret" + "value": string + } + "GITHUB_CLIENT_ID_CONSOLE": { + "type": "sst.sst.Secret" + "value": string + } + "GITHUB_CLIENT_SECRET_CONSOLE": { + "type": "sst.sst.Secret" + "value": string + } + "GOOGLE_CLIENT_ID": { + "type": "sst.sst.Secret" + "value": string + } + "HONEYCOMB_API_KEY": { + "type": "sst.sst.Secret" + "value": string + } + "R2AccessKey": { + "type": "sst.sst.Secret" + "value": string + } + "R2SecretKey": { + "type": "sst.sst.Secret" + "value": string + } + "STRIPE_SECRET_KEY": { + "type": "sst.sst.Secret" + "value": string + } + "STRIPE_WEBHOOK_SECRET": { + "type": "sst.sst.Linkable" + "value": string + } + "Web": { + "type": "sst.cloudflare.Astro" + "url": string + } + "ZEN_MODELS1": { + "type": "sst.sst.Secret" + "value": string + } + "ZEN_MODELS2": { + "type": "sst.sst.Secret" + "value": string + } + "ZEN_MODELS3": { + "type": "sst.sst.Secret" + "value": string } - ZEN_MODELS4: { - type: "sst.sst.Secret" - value: string + "ZEN_MODELS4": { + "type": "sst.sst.Secret" + "value": string } } } -// cloudflare -import * as cloudflare from "@cloudflare/workers-types" +// cloudflare +import * as cloudflare from "@cloudflare/workers-types"; declare module "sst" { export interface Resource { - Api: cloudflare.Service - AuthApi: cloudflare.Service - AuthStorage: cloudflare.KVNamespace - Bucket: cloudflare.R2Bucket - ConsoleData: cloudflare.R2Bucket - EnterpriseStorage: cloudflare.R2Bucket - GatewayKv: cloudflare.KVNamespace - LogProcessor: cloudflare.Service - ZenData: cloudflare.R2Bucket + "Api": cloudflare.Service + "AuthApi": cloudflare.Service + "AuthStorage": cloudflare.KVNamespace + "Bucket": cloudflare.R2Bucket + "EnterpriseStorage": cloudflare.R2Bucket + "GatewayKv": cloudflare.KVNamespace + "LogProcessor": cloudflare.Service + "ZenData": cloudflare.R2Bucket } } import "sst" -export {} +export {} \ No newline at end of file diff --git a/packages/desktop/src/sst-env.d.ts b/packages/desktop/src/sst-env.d.ts index 1b1683a1e74..47a8fbec7bf 100644 --- a/packages/desktop/src/sst-env.d.ts +++ b/packages/desktop/src/sst-env.d.ts @@ -2,7 +2,9 @@ /* tslint:disable */ /* eslint-disable */ /// -interface ImportMetaEnv {} +interface ImportMetaEnv { + +} interface ImportMeta { readonly env: ImportMetaEnv -} +} \ No newline at end of file diff --git a/packages/desktop/sst-env.d.ts b/packages/desktop/sst-env.d.ts index 0397645b50f..b6a7e9066ef 100644 --- a/packages/desktop/sst-env.d.ts +++ b/packages/desktop/sst-env.d.ts @@ -6,4 +6,4 @@ /// import "sst" -export {} +export {} \ No newline at end of file diff --git a/packages/enterprise/sst-env.d.ts b/packages/enterprise/sst-env.d.ts index 91566bf6efc..0b09bfd0cd8 100644 --- a/packages/enterprise/sst-env.d.ts +++ b/packages/enterprise/sst-env.d.ts @@ -6,131 +6,130 @@ import "sst" declare module "sst" { export interface Resource { - ADMIN_SECRET: { - type: "sst.sst.Secret" - value: string - } - AUTH_API_URL: { - type: "sst.sst.Linkable" - value: string - } - AWS_SES_ACCESS_KEY_ID: { - type: "sst.sst.Secret" - value: string - } - AWS_SES_SECRET_ACCESS_KEY: { - type: "sst.sst.Secret" - value: string - } - CLOUDFLARE_API_TOKEN: { - type: "sst.sst.Secret" - value: string - } - CLOUDFLARE_DEFAULT_ACCOUNT_ID: { - type: "sst.sst.Secret" - value: string - } - Console: { - type: "sst.cloudflare.SolidStart" - url: string - } - Database: { - database: string - host: string - password: string - port: number - type: "sst.sst.Linkable" - username: string - } - Desktop: { - type: "sst.cloudflare.StaticSite" - url: string - } - EMAILOCTOPUS_API_KEY: { - type: "sst.sst.Secret" - value: string - } - Enterprise: { - type: "sst.cloudflare.SolidStart" - url: string - } - GITHUB_APP_ID: { - type: "sst.sst.Secret" - value: string - } - GITHUB_APP_PRIVATE_KEY: { - type: "sst.sst.Secret" - value: string - } - GITHUB_CLIENT_ID_CONSOLE: { - type: "sst.sst.Secret" - value: string - } - GITHUB_CLIENT_SECRET_CONSOLE: { - type: "sst.sst.Secret" - value: string - } - GOOGLE_CLIENT_ID: { - type: "sst.sst.Secret" - value: string - } - HONEYCOMB_API_KEY: { - type: "sst.sst.Secret" - value: string - } - R2AccessKey: { - type: "sst.sst.Secret" - value: string - } - R2SecretKey: { - type: "sst.sst.Secret" - value: string - } - STRIPE_SECRET_KEY: { - type: "sst.sst.Secret" - value: string - } - STRIPE_WEBHOOK_SECRET: { - type: "sst.sst.Linkable" - value: string - } - Web: { - type: "sst.cloudflare.Astro" - url: string - } - ZEN_MODELS1: { - type: "sst.sst.Secret" - value: string - } - ZEN_MODELS2: { - type: "sst.sst.Secret" - value: string - } - ZEN_MODELS3: { - type: "sst.sst.Secret" - value: string + "ADMIN_SECRET": { + "type": "sst.sst.Secret" + "value": string + } + "AUTH_API_URL": { + "type": "sst.sst.Linkable" + "value": string + } + "AWS_SES_ACCESS_KEY_ID": { + "type": "sst.sst.Secret" + "value": string + } + "AWS_SES_SECRET_ACCESS_KEY": { + "type": "sst.sst.Secret" + "value": string + } + "CLOUDFLARE_API_TOKEN": { + "type": "sst.sst.Secret" + "value": string + } + "CLOUDFLARE_DEFAULT_ACCOUNT_ID": { + "type": "sst.sst.Secret" + "value": string + } + "Console": { + "type": "sst.cloudflare.SolidStart" + "url": string + } + "Database": { + "database": string + "host": string + "password": string + "port": number + "type": "sst.sst.Linkable" + "username": string + } + "Desktop": { + "type": "sst.cloudflare.StaticSite" + "url": string + } + "EMAILOCTOPUS_API_KEY": { + "type": "sst.sst.Secret" + "value": string + } + "Enterprise": { + "type": "sst.cloudflare.SolidStart" + "url": string + } + "GITHUB_APP_ID": { + "type": "sst.sst.Secret" + "value": string + } + "GITHUB_APP_PRIVATE_KEY": { + "type": "sst.sst.Secret" + "value": string + } + "GITHUB_CLIENT_ID_CONSOLE": { + "type": "sst.sst.Secret" + "value": string + } + "GITHUB_CLIENT_SECRET_CONSOLE": { + "type": "sst.sst.Secret" + "value": string + } + "GOOGLE_CLIENT_ID": { + "type": "sst.sst.Secret" + "value": string + } + "HONEYCOMB_API_KEY": { + "type": "sst.sst.Secret" + "value": string + } + "R2AccessKey": { + "type": "sst.sst.Secret" + "value": string + } + "R2SecretKey": { + "type": "sst.sst.Secret" + "value": string + } + "STRIPE_SECRET_KEY": { + "type": "sst.sst.Secret" + "value": string + } + "STRIPE_WEBHOOK_SECRET": { + "type": "sst.sst.Linkable" + "value": string + } + "Web": { + "type": "sst.cloudflare.Astro" + "url": string + } + "ZEN_MODELS1": { + "type": "sst.sst.Secret" + "value": string + } + "ZEN_MODELS2": { + "type": "sst.sst.Secret" + "value": string + } + "ZEN_MODELS3": { + "type": "sst.sst.Secret" + "value": string } - ZEN_MODELS4: { - type: "sst.sst.Secret" - value: string + "ZEN_MODELS4": { + "type": "sst.sst.Secret" + "value": string } } } -// cloudflare -import * as cloudflare from "@cloudflare/workers-types" +// cloudflare +import * as cloudflare from "@cloudflare/workers-types"; declare module "sst" { export interface Resource { - Api: cloudflare.Service - AuthApi: cloudflare.Service - AuthStorage: cloudflare.KVNamespace - Bucket: cloudflare.R2Bucket - ConsoleData: cloudflare.R2Bucket - EnterpriseStorage: cloudflare.R2Bucket - GatewayKv: cloudflare.KVNamespace - LogProcessor: cloudflare.Service - ZenData: cloudflare.R2Bucket + "Api": cloudflare.Service + "AuthApi": cloudflare.Service + "AuthStorage": cloudflare.KVNamespace + "Bucket": cloudflare.R2Bucket + "EnterpriseStorage": cloudflare.R2Bucket + "GatewayKv": cloudflare.KVNamespace + "LogProcessor": cloudflare.Service + "ZenData": cloudflare.R2Bucket } } import "sst" -export {} +export {} \ No newline at end of file diff --git a/packages/function/sst-env.d.ts b/packages/function/sst-env.d.ts index 91566bf6efc..0b09bfd0cd8 100644 --- a/packages/function/sst-env.d.ts +++ b/packages/function/sst-env.d.ts @@ -6,131 +6,130 @@ import "sst" declare module "sst" { export interface Resource { - ADMIN_SECRET: { - type: "sst.sst.Secret" - value: string - } - AUTH_API_URL: { - type: "sst.sst.Linkable" - value: string - } - AWS_SES_ACCESS_KEY_ID: { - type: "sst.sst.Secret" - value: string - } - AWS_SES_SECRET_ACCESS_KEY: { - type: "sst.sst.Secret" - value: string - } - CLOUDFLARE_API_TOKEN: { - type: "sst.sst.Secret" - value: string - } - CLOUDFLARE_DEFAULT_ACCOUNT_ID: { - type: "sst.sst.Secret" - value: string - } - Console: { - type: "sst.cloudflare.SolidStart" - url: string - } - Database: { - database: string - host: string - password: string - port: number - type: "sst.sst.Linkable" - username: string - } - Desktop: { - type: "sst.cloudflare.StaticSite" - url: string - } - EMAILOCTOPUS_API_KEY: { - type: "sst.sst.Secret" - value: string - } - Enterprise: { - type: "sst.cloudflare.SolidStart" - url: string - } - GITHUB_APP_ID: { - type: "sst.sst.Secret" - value: string - } - GITHUB_APP_PRIVATE_KEY: { - type: "sst.sst.Secret" - value: string - } - GITHUB_CLIENT_ID_CONSOLE: { - type: "sst.sst.Secret" - value: string - } - GITHUB_CLIENT_SECRET_CONSOLE: { - type: "sst.sst.Secret" - value: string - } - GOOGLE_CLIENT_ID: { - type: "sst.sst.Secret" - value: string - } - HONEYCOMB_API_KEY: { - type: "sst.sst.Secret" - value: string - } - R2AccessKey: { - type: "sst.sst.Secret" - value: string - } - R2SecretKey: { - type: "sst.sst.Secret" - value: string - } - STRIPE_SECRET_KEY: { - type: "sst.sst.Secret" - value: string - } - STRIPE_WEBHOOK_SECRET: { - type: "sst.sst.Linkable" - value: string - } - Web: { - type: "sst.cloudflare.Astro" - url: string - } - ZEN_MODELS1: { - type: "sst.sst.Secret" - value: string - } - ZEN_MODELS2: { - type: "sst.sst.Secret" - value: string - } - ZEN_MODELS3: { - type: "sst.sst.Secret" - value: string + "ADMIN_SECRET": { + "type": "sst.sst.Secret" + "value": string + } + "AUTH_API_URL": { + "type": "sst.sst.Linkable" + "value": string + } + "AWS_SES_ACCESS_KEY_ID": { + "type": "sst.sst.Secret" + "value": string + } + "AWS_SES_SECRET_ACCESS_KEY": { + "type": "sst.sst.Secret" + "value": string + } + "CLOUDFLARE_API_TOKEN": { + "type": "sst.sst.Secret" + "value": string + } + "CLOUDFLARE_DEFAULT_ACCOUNT_ID": { + "type": "sst.sst.Secret" + "value": string + } + "Console": { + "type": "sst.cloudflare.SolidStart" + "url": string + } + "Database": { + "database": string + "host": string + "password": string + "port": number + "type": "sst.sst.Linkable" + "username": string + } + "Desktop": { + "type": "sst.cloudflare.StaticSite" + "url": string + } + "EMAILOCTOPUS_API_KEY": { + "type": "sst.sst.Secret" + "value": string + } + "Enterprise": { + "type": "sst.cloudflare.SolidStart" + "url": string + } + "GITHUB_APP_ID": { + "type": "sst.sst.Secret" + "value": string + } + "GITHUB_APP_PRIVATE_KEY": { + "type": "sst.sst.Secret" + "value": string + } + "GITHUB_CLIENT_ID_CONSOLE": { + "type": "sst.sst.Secret" + "value": string + } + "GITHUB_CLIENT_SECRET_CONSOLE": { + "type": "sst.sst.Secret" + "value": string + } + "GOOGLE_CLIENT_ID": { + "type": "sst.sst.Secret" + "value": string + } + "HONEYCOMB_API_KEY": { + "type": "sst.sst.Secret" + "value": string + } + "R2AccessKey": { + "type": "sst.sst.Secret" + "value": string + } + "R2SecretKey": { + "type": "sst.sst.Secret" + "value": string + } + "STRIPE_SECRET_KEY": { + "type": "sst.sst.Secret" + "value": string + } + "STRIPE_WEBHOOK_SECRET": { + "type": "sst.sst.Linkable" + "value": string + } + "Web": { + "type": "sst.cloudflare.Astro" + "url": string + } + "ZEN_MODELS1": { + "type": "sst.sst.Secret" + "value": string + } + "ZEN_MODELS2": { + "type": "sst.sst.Secret" + "value": string + } + "ZEN_MODELS3": { + "type": "sst.sst.Secret" + "value": string } - ZEN_MODELS4: { - type: "sst.sst.Secret" - value: string + "ZEN_MODELS4": { + "type": "sst.sst.Secret" + "value": string } } } -// cloudflare -import * as cloudflare from "@cloudflare/workers-types" +// cloudflare +import * as cloudflare from "@cloudflare/workers-types"; declare module "sst" { export interface Resource { - Api: cloudflare.Service - AuthApi: cloudflare.Service - AuthStorage: cloudflare.KVNamespace - Bucket: cloudflare.R2Bucket - ConsoleData: cloudflare.R2Bucket - EnterpriseStorage: cloudflare.R2Bucket - GatewayKv: cloudflare.KVNamespace - LogProcessor: cloudflare.Service - ZenData: cloudflare.R2Bucket + "Api": cloudflare.Service + "AuthApi": cloudflare.Service + "AuthStorage": cloudflare.KVNamespace + "Bucket": cloudflare.R2Bucket + "EnterpriseStorage": cloudflare.R2Bucket + "GatewayKv": cloudflare.KVNamespace + "LogProcessor": cloudflare.Service + "ZenData": cloudflare.R2Bucket } } import "sst" -export {} +export {} \ No newline at end of file diff --git a/packages/opencode/sst-env.d.ts b/packages/opencode/sst-env.d.ts index 0397645b50f..b6a7e9066ef 100644 --- a/packages/opencode/sst-env.d.ts +++ b/packages/opencode/sst-env.d.ts @@ -6,4 +6,4 @@ /// import "sst" -export {} +export {} \ No newline at end of file diff --git a/packages/plugin/sst-env.d.ts b/packages/plugin/sst-env.d.ts index 0397645b50f..b6a7e9066ef 100644 --- a/packages/plugin/sst-env.d.ts +++ b/packages/plugin/sst-env.d.ts @@ -6,4 +6,4 @@ /// import "sst" -export {} +export {} \ No newline at end of file diff --git a/packages/script/sst-env.d.ts b/packages/script/sst-env.d.ts index 0397645b50f..b6a7e9066ef 100644 --- a/packages/script/sst-env.d.ts +++ b/packages/script/sst-env.d.ts @@ -6,4 +6,4 @@ /// import "sst" -export {} +export {} \ No newline at end of file diff --git a/packages/sdk/js/sst-env.d.ts b/packages/sdk/js/sst-env.d.ts index bd558821739..9b9de73273f 100644 --- a/packages/sdk/js/sst-env.d.ts +++ b/packages/sdk/js/sst-env.d.ts @@ -6,4 +6,4 @@ /// import "sst" -export {} +export {} \ No newline at end of file diff --git a/packages/sdk/python/sst.pyi b/packages/sdk/python/sst.pyi index 9fa612eb705..82d093d8118 100644 --- a/packages/sdk/python/sst.pyi +++ b/packages/sdk/python/sst.pyi @@ -39,9 +39,6 @@ class Resource: class Console: type: str url: str - class ConsoleData: - name: str - type: str class Database: database: str host: str diff --git a/packages/slack/sst-env.d.ts b/packages/slack/sst-env.d.ts index 0397645b50f..b6a7e9066ef 100644 --- a/packages/slack/sst-env.d.ts +++ b/packages/slack/sst-env.d.ts @@ -6,4 +6,4 @@ /// import "sst" -export {} +export {} \ No newline at end of file diff --git a/packages/tauri/sst-env.d.ts b/packages/tauri/sst-env.d.ts index 0397645b50f..b6a7e9066ef 100644 --- a/packages/tauri/sst-env.d.ts +++ b/packages/tauri/sst-env.d.ts @@ -6,4 +6,4 @@ /// import "sst" -export {} +export {} \ No newline at end of file diff --git a/packages/ui/sst-env.d.ts b/packages/ui/sst-env.d.ts index 0397645b50f..b6a7e9066ef 100644 --- a/packages/ui/sst-env.d.ts +++ b/packages/ui/sst-env.d.ts @@ -6,4 +6,4 @@ /// import "sst" -export {} +export {} \ No newline at end of file diff --git a/packages/util/sst-env.d.ts b/packages/util/sst-env.d.ts index 0397645b50f..b6a7e9066ef 100644 --- a/packages/util/sst-env.d.ts +++ b/packages/util/sst-env.d.ts @@ -6,4 +6,4 @@ /// import "sst" -export {} +export {} \ No newline at end of file diff --git a/packages/web/sst-env.d.ts b/packages/web/sst-env.d.ts index 0397645b50f..b6a7e9066ef 100644 --- a/packages/web/sst-env.d.ts +++ b/packages/web/sst-env.d.ts @@ -6,4 +6,4 @@ /// import "sst" -export {} +export {} \ No newline at end of file diff --git a/sdks/vscode/sst-env.d.ts b/sdks/vscode/sst-env.d.ts index 0397645b50f..b6a7e9066ef 100644 --- a/sdks/vscode/sst-env.d.ts +++ b/sdks/vscode/sst-env.d.ts @@ -6,4 +6,4 @@ /// import "sst" -export {} +export {} \ No newline at end of file diff --git a/sst-env.d.ts b/sst-env.d.ts index 15255c7ec21..247b0ba8105 100644 --- a/sst-env.d.ts +++ b/sst-env.d.ts @@ -5,152 +5,148 @@ declare module "sst" { export interface Resource { - ADMIN_SECRET: { - type: "sst.sst.Secret" - value: string - } - AUTH_API_URL: { - type: "sst.sst.Linkable" - value: string - } - AWS_SES_ACCESS_KEY_ID: { - type: "sst.sst.Secret" - value: string - } - AWS_SES_SECRET_ACCESS_KEY: { - type: "sst.sst.Secret" - value: string - } - Api: { - type: "sst.cloudflare.Worker" - url: string - } - AuthApi: { - type: "sst.cloudflare.Worker" - url: string - } - AuthStorage: { - namespaceId: string - type: "sst.cloudflare.Kv" - } - Bucket: { - name: string - type: "sst.cloudflare.Bucket" - } - CLOUDFLARE_API_TOKEN: { - type: "sst.sst.Secret" - value: string - } - CLOUDFLARE_DEFAULT_ACCOUNT_ID: { - type: "sst.sst.Secret" - value: string - } - Console: { - type: "sst.cloudflare.SolidStart" - url: string + "ADMIN_SECRET": { + "type": "sst.sst.Secret" + "value": string + } + "AUTH_API_URL": { + "type": "sst.sst.Linkable" + "value": string + } + "AWS_SES_ACCESS_KEY_ID": { + "type": "sst.sst.Secret" + "value": string + } + "AWS_SES_SECRET_ACCESS_KEY": { + "type": "sst.sst.Secret" + "value": string + } + "Api": { + "type": "sst.cloudflare.Worker" + "url": string + } + "AuthApi": { + "type": "sst.cloudflare.Worker" + "url": string + } + "AuthStorage": { + "namespaceId": string + "type": "sst.cloudflare.Kv" + } + "Bucket": { + "name": string + "type": "sst.cloudflare.Bucket" + } + "CLOUDFLARE_API_TOKEN": { + "type": "sst.sst.Secret" + "value": string + } + "CLOUDFLARE_DEFAULT_ACCOUNT_ID": { + "type": "sst.sst.Secret" + "value": string } - ConsoleData: { - name: string - type: "sst.cloudflare.Bucket" + "Console": { + "type": "sst.cloudflare.SolidStart" + "url": string } - Database: { - database: string - host: string - password: string - port: number - type: "sst.sst.Linkable" - username: string + "Database": { + "database": string + "host": string + "password": string + "port": number + "type": "sst.sst.Linkable" + "username": string } - Desktop: { - type: "sst.cloudflare.StaticSite" - url: string + "Desktop": { + "type": "sst.cloudflare.StaticSite" + "url": string } - EMAILOCTOPUS_API_KEY: { - type: "sst.sst.Secret" - value: string + "EMAILOCTOPUS_API_KEY": { + "type": "sst.sst.Secret" + "value": string } - Enterprise: { - type: "sst.cloudflare.SolidStart" - url: string + "Enterprise": { + "type": "sst.cloudflare.SolidStart" + "url": string } - EnterpriseStorage: { - name: string - type: "sst.cloudflare.Bucket" + "EnterpriseStorage": { + "name": string + "type": "sst.cloudflare.Bucket" } - GITHUB_APP_ID: { - type: "sst.sst.Secret" - value: string + "GITHUB_APP_ID": { + "type": "sst.sst.Secret" + "value": string } - GITHUB_APP_PRIVATE_KEY: { - type: "sst.sst.Secret" - value: string + "GITHUB_APP_PRIVATE_KEY": { + "type": "sst.sst.Secret" + "value": string } - GITHUB_CLIENT_ID_CONSOLE: { - type: "sst.sst.Secret" - value: string + "GITHUB_CLIENT_ID_CONSOLE": { + "type": "sst.sst.Secret" + "value": string } - GITHUB_CLIENT_SECRET_CONSOLE: { - type: "sst.sst.Secret" - value: string + "GITHUB_CLIENT_SECRET_CONSOLE": { + "type": "sst.sst.Secret" + "value": string } - GOOGLE_CLIENT_ID: { - type: "sst.sst.Secret" - value: string + "GOOGLE_CLIENT_ID": { + "type": "sst.sst.Secret" + "value": string } - GatewayKv: { - namespaceId: string - type: "sst.cloudflare.Kv" + "GatewayKv": { + "namespaceId": string + "type": "sst.cloudflare.Kv" } - HONEYCOMB_API_KEY: { - type: "sst.sst.Secret" - value: string + "HONEYCOMB_API_KEY": { + "type": "sst.sst.Secret" + "value": string } - LogProcessor: { - type: "sst.cloudflare.Worker" + "LogProcessor": { + "type": "sst.cloudflare.Worker" } - R2AccessKey: { - type: "sst.sst.Secret" - value: string + "R2AccessKey": { + "type": "sst.sst.Secret" + "value": string } - R2SecretKey: { - type: "sst.sst.Secret" - value: string + "R2SecretKey": { + "type": "sst.sst.Secret" + "value": string } - STRIPE_SECRET_KEY: { - type: "sst.sst.Secret" - value: string + "STRIPE_SECRET_KEY": { + "type": "sst.sst.Secret" + "value": string } - STRIPE_WEBHOOK_SECRET: { - type: "sst.sst.Linkable" - value: string + "STRIPE_WEBHOOK_SECRET": { + "type": "sst.sst.Linkable" + "value": string } - Web: { - type: "sst.cloudflare.Astro" - url: string + "Web": { + "type": "sst.cloudflare.Astro" + "url": string } - ZEN_MODELS1: { - type: "sst.sst.Secret" - value: string + "ZEN_MODELS1": { + "type": "sst.sst.Secret" + "value": string } - ZEN_MODELS2: { - type: "sst.sst.Secret" - value: string + "ZEN_MODELS2": { + "type": "sst.sst.Secret" + "value": string } - ZEN_MODELS3: { - type: "sst.sst.Secret" - value: string + "ZEN_MODELS3": { + "type": "sst.sst.Secret" + "value": string } - ZEN_MODELS4: { - type: "sst.sst.Secret" - value: string + "ZEN_MODELS4": { + "type": "sst.sst.Secret" + "value": string } - ZenData: { - name: string - type: "sst.cloudflare.Bucket" + "ZenData": { + "name": string + "type": "sst.cloudflare.Bucket" } } } /// import "sst" -export {} +export {} \ No newline at end of file From e2e2b7934e94606b376bee1c42911ace394535b6 Mon Sep 17 00:00:00 2001 From: Aiden Cline Date: Tue, 2 Dec 2025 17:43:20 -0600 Subject: [PATCH 12/26] Make homebrew update check use homebrew registry version info --- packages/opencode/src/cli/upgrade.ts | 4 ++-- packages/opencode/src/installation/index.ts | 15 ++++++++++++++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/packages/opencode/src/cli/upgrade.ts b/packages/opencode/src/cli/upgrade.ts index 2bea760b33b..2d46ae39fa2 100644 --- a/packages/opencode/src/cli/upgrade.ts +++ b/packages/opencode/src/cli/upgrade.ts @@ -5,7 +5,8 @@ import { Installation } from "@/installation" export async function upgrade() { const config = await Config.global() - const latest = await Installation.latest().catch(() => {}) + const method = await Installation.method() + const latest = await Installation.latest(method).catch(() => {}) if (!latest) return if (Installation.VERSION === latest) return @@ -17,7 +18,6 @@ export async function upgrade() { return } - const method = await Installation.method() if (method === "unknown") return await Installation.upgrade(method, latest) .then(() => Bus.publish(Installation.Event.Updated, { version: latest })) diff --git a/packages/opencode/src/installation/index.ts b/packages/opencode/src/installation/index.ts index 37b74fc39b4..0f3e2ce6b11 100644 --- a/packages/opencode/src/installation/index.ts +++ b/packages/opencode/src/installation/index.ts @@ -163,7 +163,20 @@ export namespace Installation { export const CHANNEL = typeof OPENCODE_CHANNEL === "string" ? OPENCODE_CHANNEL : "local" export const USER_AGENT = `opencode/${CHANNEL}/${VERSION}` - export async function latest() { + export async function latest(installMethod?: Method) { + const detectedMethod = installMethod || (await method()) + if (detectedMethod === "brew") { + const formula = await getBrewFormula() + if (formula === "opencode") { + return fetch("https://formulae.brew.sh/api/formula/opencode.json") + .then((res) => { + if (!res.ok) throw new Error(res.statusText) + return res.json() + }) + .then((data: any) => data.versions.stable) + } + } + const registry = await iife(async () => { const r = (await $`npm config get registry`.quiet().nothrow().text()).trim() const reg = r || "https://registry.npmjs.org" From a8ad74aef3f8b6cd84c76855cbbb30f4fb472b86 Mon Sep 17 00:00:00 2001 From: Aiden Cline Date: Tue, 2 Dec 2025 19:24:05 -0600 Subject: [PATCH 13/26] add basic session list command --- packages/opencode/src/cli/cmd/session.ts | 106 +++++++++++++++++++++++ packages/opencode/src/index.ts | 2 + 2 files changed, 108 insertions(+) create mode 100644 packages/opencode/src/cli/cmd/session.ts diff --git a/packages/opencode/src/cli/cmd/session.ts b/packages/opencode/src/cli/cmd/session.ts new file mode 100644 index 00000000000..c8b5b033660 --- /dev/null +++ b/packages/opencode/src/cli/cmd/session.ts @@ -0,0 +1,106 @@ +import type { Argv } from "yargs" +import { cmd } from "./cmd" +import { Session } from "../../session" +import { bootstrap } from "../bootstrap" +import { UI } from "../ui" +import { Locale } from "../../util/locale" +import { EOL } from "os" + +export const SessionCommand = cmd({ + command: "session", + describe: "manage sessions", + builder: (yargs: Argv) => yargs.command(SessionListCommand).demandCommand(), + async handler() {}, +}) + +export const SessionListCommand = cmd({ + command: "list", + describe: "list sessions", + builder: (yargs: Argv) => { + return yargs + .option("max-count", { + alias: "n", + describe: "limit to N most recent sessions", + type: "number", + }) + .option("format", { + describe: "output format", + type: "string", + choices: ["table", "json"], + default: "table", + }) + }, + handler: async (args) => { + await bootstrap(process.cwd(), async () => { + const sessions = [] + for await (const session of Session.list()) { + if (!session.parentID) { + sessions.push(session) + } + } + + sessions.sort((a, b) => b.time.updated - a.time.updated) + + const limitedSessions = args.maxCount ? sessions.slice(0, args.maxCount) : sessions + + if (limitedSessions.length === 0) { + return + } + + let output: string + if (args.format === "json") { + output = formatSessionJSON(limitedSessions) + } else { + output = formatSessionTable(limitedSessions) + } + + const shouldPaginate = process.stdout.isTTY && !args.maxCount && args.format === "table" + + if (shouldPaginate) { + const proc = Bun.spawn({ + cmd: ["less", "-R", "-S"], + stdin: "pipe", + stdout: "inherit", + stderr: "inherit", + }) + + proc.stdin.write(output) + proc.stdin.end() + await proc.exited + } else { + console.log(output) + } + }) + }, +}) + +function formatSessionTable(sessions: Session.Info[]): string { + const lines: string[] = [] + + const maxIdWidth = Math.max(20, ...sessions.map((s) => s.id.length)) + const maxTitleWidth = Math.max(25, ...sessions.map((s) => s.title.length)) + + const header = `Session ID${" ".repeat(maxIdWidth - 10)} Title${" ".repeat(maxTitleWidth - 5)} Updated` + lines.push(header) + lines.push("─".repeat(header.length)) + for (const session of sessions) { + const truncatedTitle = Locale.truncate(session.title, maxTitleWidth) + const timeStr = Locale.todayTimeOrDateTime(session.time.updated) + const line = `${session.id.padEnd(maxIdWidth)} ${truncatedTitle.padEnd(maxTitleWidth)} ${timeStr}` + lines.push(line) + } + + return lines.join(EOL) +} + +function formatSessionJSON(sessions: Session.Info[]): string { + const jsonData = sessions.map((session) => ({ + id: session.id, + title: session.title, + updated: session.time.updated, + created: session.time.created, + projectId: session.projectID, + directory: session.directory, + })) + return JSON.stringify(jsonData, null, 2) +} diff --git a/packages/opencode/src/index.ts b/packages/opencode/src/index.ts index 5fb6f966cfd..5ddf68e10cd 100644 --- a/packages/opencode/src/index.ts +++ b/packages/opencode/src/index.ts @@ -25,6 +25,7 @@ import { AcpCommand } from "./cli/cmd/acp" import { EOL } from "os" import { WebCommand } from "./cli/cmd/web" import { PrCommand } from "./cli/cmd/pr" +import { SessionCommand } from "./cli/cmd/session" process.on("unhandledRejection", (e) => { Log.Default.error("rejection", { @@ -93,6 +94,7 @@ const cli = yargs(hideBin(process.argv)) .command(ImportCommand) .command(GithubCommand) .command(PrCommand) + .command(SessionCommand) .fail((msg) => { if ( msg.startsWith("Unknown argument") || From 80636fec4383ad08b1dac1b617333e8c196c1d81 Mon Sep 17 00:00:00 2001 From: Sebastian Herrlinger Date: Wed, 3 Dec 2025 03:03:52 +0100 Subject: [PATCH 14/26] bump opentui to v0.1.55 - fix scrollbox empty/blank last items at bottom - fix should not insert chars with modifiers in input/textarea anymore - do not wrap OSC4 palette sequences for tmux 3.6 --- bun.lock | 20 ++++---------------- packages/opencode/package.json | 4 ++-- 2 files changed, 6 insertions(+), 18 deletions(-) diff --git a/bun.lock b/bun.lock index d9caa4de70e..4fbaab5c406 100644 --- a/bun.lock +++ b/bun.lock @@ -238,8 +238,8 @@ "@opencode-ai/sdk": "workspace:*", "@opencode-ai/util": "workspace:*", "@openrouter/ai-sdk-provider": "1.2.8", - "@opentui/core": "0.1.54", - "@opentui/solid": "0.1.54", + "@opentui/core": "0.1.55", + "@opentui/solid": "0.1.55", "@parcel/watcher": "2.5.1", "@pierre/precision-diffs": "catalog:", "@solid-primitives/event-bus": "1.1.2", @@ -1088,21 +1088,9 @@ "@opentelemetry/api": ["@opentelemetry/api@1.9.0", "", {}, "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg=="], - "@opentui/core": ["@opentui/core@0.1.54", "", { "dependencies": { "bun-ffi-structs": "0.1.2", "diff": "8.0.2", "jimp": "1.6.0", "yoga-layout": "3.2.1" }, "optionalDependencies": { "@dimforge/rapier2d-simd-compat": "^0.17.3", "@opentui/core-darwin-arm64": "0.1.54", "@opentui/core-darwin-x64": "0.1.54", "@opentui/core-linux-arm64": "0.1.54", "@opentui/core-linux-x64": "0.1.54", "@opentui/core-win32-arm64": "0.1.54", "@opentui/core-win32-x64": "0.1.54", "bun-webgpu": "0.1.4", "planck": "^1.4.2", "three": "0.177.0" }, "peerDependencies": { "web-tree-sitter": "0.25.10" } }, "sha512-NYBVOmAa3JB+bSTxFTUc3Ej3B8Gc364DMsoktVRCYdjQ+AyeMRNdOTj9sMWdDJbXqITK/atrsUXouoE5bL9sWA=="], + "@opentui/core": ["@opentui/core@0.1.55", "", { "dependencies": { "bun-ffi-structs": "0.1.2", "diff": "8.0.2", "jimp": "1.6.0", "yoga-layout": "3.2.1" }, "optionalDependencies": { "@dimforge/rapier2d-simd-compat": "^0.17.3", "@opentui/core-darwin-arm64": "0.1.55", "@opentui/core-darwin-x64": "0.1.55", "@opentui/core-linux-arm64": "0.1.55", "@opentui/core-linux-x64": "0.1.55", "@opentui/core-win32-arm64": "0.1.55", "@opentui/core-win32-x64": "0.1.55", "bun-webgpu": "0.1.4", "planck": "^1.4.2", "three": "0.177.0" }, "peerDependencies": { "web-tree-sitter": "0.25.10" } }, "sha512-WafOO8eMf1/fmlFUfgooWyWJclQG5X/72VUebH+jN6/kSoSb91XJxHQgaKL9CQYFBNBIApQhAZn/sF9Qt60+lQ=="], - "@opentui/core-darwin-arm64": ["@opentui/core-darwin-arm64@0.1.54", "", { "os": "darwin", "cpu": "arm64" }, "sha512-LyJ2AI9XA3upckiXLaX/P6tB40pB6euZA5MCikyhwcDVew3Z7NpTI0xHp4gUWHwsSTwmx6u851ofgkf7nMBEJg=="], - - "@opentui/core-darwin-x64": ["@opentui/core-darwin-x64@0.1.54", "", { "os": "darwin", "cpu": "x64" }, "sha512-LZAjXR1OoUr8pewBTHqxupdPS4PC4qQCht0HHGEr1+zN7zu5c+kcp3Uop+NeQTYLjHJftiULukzAfLJMXFuDNA=="], - - "@opentui/core-linux-arm64": ["@opentui/core-linux-arm64@0.1.54", "", { "os": "linux", "cpu": "arm64" }, "sha512-AC7qBYc4shY28/eR1BvguvfCjLzZJy0mdvadSdDF0XJJIe5vhWJ9UyKsoyLo7pwrd0iFBf5d7fg4kJcbLbZNWg=="], - - "@opentui/core-linux-x64": ["@opentui/core-linux-x64@0.1.54", "", { "os": "linux", "cpu": "x64" }, "sha512-S7BAq4CUV6ZfoXDSClJT75XxVSKPOOuRVYvBSHMOgwkBwLHpJZdz0Z4mzcGBBP1nJQ5Gz92TWPYfYMbZvR1lpw=="], - - "@opentui/core-win32-arm64": ["@opentui/core-win32-arm64@0.1.54", "", { "os": "win32", "cpu": "arm64" }, "sha512-K+E9i8t6YfN0Ly9moHefRQfR5GSbQUAsqzfrW4TD4bpJBy5y7EKh1mz8ZdES/RwWOSGUCb+JN7/ZQm0OubbdvQ=="], - - "@opentui/core-win32-x64": ["@opentui/core-win32-x64@0.1.54", "", { "os": "win32", "cpu": "x64" }, "sha512-0KsBPRtcqmPM1AoN2Ez9au6uf7y8631W9tXTWnVZRlI2/G3j1AfGReR6vuwrd8O4JfxFXiYWWPfSxYZvWLSRNg=="], - - "@opentui/solid": ["@opentui/solid@0.1.54", "", { "dependencies": { "@babel/core": "7.28.0", "@babel/preset-typescript": "7.27.1", "@opentui/core": "0.1.54", "babel-plugin-module-resolver": "5.0.2", "babel-preset-solid": "1.9.9", "s-js": "^0.4.9" }, "peerDependencies": { "solid-js": "1.9.9" } }, "sha512-rr9moI+W3meoD57t4Flyfw33mRSFIX0FOx+t4T3sLNA3Pz5FGU2n4qyxPc21OkAuc23S+YxuEuwbZebnIaLGWA=="], + "@opentui/solid": ["@opentui/solid@0.1.55", "", { "dependencies": { "@babel/core": "7.28.0", "@babel/preset-typescript": "7.27.1", "@opentui/core": "0.1.55", "babel-plugin-module-resolver": "5.0.2", "babel-preset-solid": "1.9.9", "s-js": "^0.4.9" }, "peerDependencies": { "solid-js": "1.9.9" } }, "sha512-6NWOt0k32tu5KCiddLkPjVNWd++vW3QNbEccuGOdSiotO5TuwK4g0rcLAG6haPOB7Mf/l6aC06FQNeexpBqvtQ=="], "@oslojs/asn1": ["@oslojs/asn1@1.0.0", "", { "dependencies": { "@oslojs/binary": "1.0.0" } }, "sha512-zw/wn0sj0j0QKbIXfIlnEcTviaCzYOY3V5rAyjR6YtOByFtJiT574+8p9Wlach0lZH9fddD4yb9laEAIl4vXQA=="], diff --git a/packages/opencode/package.json b/packages/opencode/package.json index 210a481efb5..e919f722e59 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -64,8 +64,8 @@ "@opencode-ai/sdk": "workspace:*", "@opencode-ai/util": "workspace:*", "@openrouter/ai-sdk-provider": "1.2.8", - "@opentui/core": "0.1.54", - "@opentui/solid": "0.1.54", + "@opentui/core": "0.1.55", + "@opentui/solid": "0.1.55", "@parcel/watcher": "2.5.1", "@pierre/precision-diffs": "catalog:", "@solid-primitives/event-bus": "1.1.2", From 74c882d9d0a3a84adf851a80ee49fec12eb7074a Mon Sep 17 00:00:00 2001 From: Github Action Date: Wed, 3 Dec 2025 02:06:35 +0000 Subject: [PATCH 15/26] Update Nix flake.lock and hashes --- flake.lock | 6 +++--- nix/hashes.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/flake.lock b/flake.lock index 2ef89f66169..45c31d9ccf2 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "nixpkgs": { "locked": { - "lastModified": 1764611609, - "narHash": "sha256-yU9BNcP0oadUKupw0UKmO9BKDOVIg9NStdJosEbXf8U=", + "lastModified": 1764642553, + "narHash": "sha256-mvbFFzVBhVK1FjyPHZGMAKpNiqkr7k++xIwy+p/NQvA=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "8c29968b3a942f2903f90797f9623737c215737c", + "rev": "f720de59066162ee879adcc8c79e15c51fe6bfb4", "type": "github" }, "original": { diff --git a/nix/hashes.json b/nix/hashes.json index e34d21200fd..2fb77766343 100644 --- a/nix/hashes.json +++ b/nix/hashes.json @@ -1,3 +1,3 @@ { - "nodeModules": "sha256-HyH219sZn4gOPyVg/bij7K3mfZ0MnBSM/7NmsOyrD4o=" + "nodeModules": "sha256-33jZtQ/hb0JM6c0P1zJwSdZRjJyTC3hqEbhIUp8b0pA=" } From 8098031eacd4c9e979eb8a3a931b2b3aee111c38 Mon Sep 17 00:00:00 2001 From: Sebastian Herrlinger Date: Wed, 3 Dec 2025 03:14:08 +0100 Subject: [PATCH 16/26] Revert "bump opentui to v0.1.55" This reverts commit 80636fec4383ad08b1dac1b617333e8c196c1d81. --- bun.lock | 20 ++++++++++++++++---- packages/opencode/package.json | 4 ++-- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/bun.lock b/bun.lock index 4fbaab5c406..d9caa4de70e 100644 --- a/bun.lock +++ b/bun.lock @@ -238,8 +238,8 @@ "@opencode-ai/sdk": "workspace:*", "@opencode-ai/util": "workspace:*", "@openrouter/ai-sdk-provider": "1.2.8", - "@opentui/core": "0.1.55", - "@opentui/solid": "0.1.55", + "@opentui/core": "0.1.54", + "@opentui/solid": "0.1.54", "@parcel/watcher": "2.5.1", "@pierre/precision-diffs": "catalog:", "@solid-primitives/event-bus": "1.1.2", @@ -1088,9 +1088,21 @@ "@opentelemetry/api": ["@opentelemetry/api@1.9.0", "", {}, "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg=="], - "@opentui/core": ["@opentui/core@0.1.55", "", { "dependencies": { "bun-ffi-structs": "0.1.2", "diff": "8.0.2", "jimp": "1.6.0", "yoga-layout": "3.2.1" }, "optionalDependencies": { "@dimforge/rapier2d-simd-compat": "^0.17.3", "@opentui/core-darwin-arm64": "0.1.55", "@opentui/core-darwin-x64": "0.1.55", "@opentui/core-linux-arm64": "0.1.55", "@opentui/core-linux-x64": "0.1.55", "@opentui/core-win32-arm64": "0.1.55", "@opentui/core-win32-x64": "0.1.55", "bun-webgpu": "0.1.4", "planck": "^1.4.2", "three": "0.177.0" }, "peerDependencies": { "web-tree-sitter": "0.25.10" } }, "sha512-WafOO8eMf1/fmlFUfgooWyWJclQG5X/72VUebH+jN6/kSoSb91XJxHQgaKL9CQYFBNBIApQhAZn/sF9Qt60+lQ=="], + "@opentui/core": ["@opentui/core@0.1.54", "", { "dependencies": { "bun-ffi-structs": "0.1.2", "diff": "8.0.2", "jimp": "1.6.0", "yoga-layout": "3.2.1" }, "optionalDependencies": { "@dimforge/rapier2d-simd-compat": "^0.17.3", "@opentui/core-darwin-arm64": "0.1.54", "@opentui/core-darwin-x64": "0.1.54", "@opentui/core-linux-arm64": "0.1.54", "@opentui/core-linux-x64": "0.1.54", "@opentui/core-win32-arm64": "0.1.54", "@opentui/core-win32-x64": "0.1.54", "bun-webgpu": "0.1.4", "planck": "^1.4.2", "three": "0.177.0" }, "peerDependencies": { "web-tree-sitter": "0.25.10" } }, "sha512-NYBVOmAa3JB+bSTxFTUc3Ej3B8Gc364DMsoktVRCYdjQ+AyeMRNdOTj9sMWdDJbXqITK/atrsUXouoE5bL9sWA=="], - "@opentui/solid": ["@opentui/solid@0.1.55", "", { "dependencies": { "@babel/core": "7.28.0", "@babel/preset-typescript": "7.27.1", "@opentui/core": "0.1.55", "babel-plugin-module-resolver": "5.0.2", "babel-preset-solid": "1.9.9", "s-js": "^0.4.9" }, "peerDependencies": { "solid-js": "1.9.9" } }, "sha512-6NWOt0k32tu5KCiddLkPjVNWd++vW3QNbEccuGOdSiotO5TuwK4g0rcLAG6haPOB7Mf/l6aC06FQNeexpBqvtQ=="], + "@opentui/core-darwin-arm64": ["@opentui/core-darwin-arm64@0.1.54", "", { "os": "darwin", "cpu": "arm64" }, "sha512-LyJ2AI9XA3upckiXLaX/P6tB40pB6euZA5MCikyhwcDVew3Z7NpTI0xHp4gUWHwsSTwmx6u851ofgkf7nMBEJg=="], + + "@opentui/core-darwin-x64": ["@opentui/core-darwin-x64@0.1.54", "", { "os": "darwin", "cpu": "x64" }, "sha512-LZAjXR1OoUr8pewBTHqxupdPS4PC4qQCht0HHGEr1+zN7zu5c+kcp3Uop+NeQTYLjHJftiULukzAfLJMXFuDNA=="], + + "@opentui/core-linux-arm64": ["@opentui/core-linux-arm64@0.1.54", "", { "os": "linux", "cpu": "arm64" }, "sha512-AC7qBYc4shY28/eR1BvguvfCjLzZJy0mdvadSdDF0XJJIe5vhWJ9UyKsoyLo7pwrd0iFBf5d7fg4kJcbLbZNWg=="], + + "@opentui/core-linux-x64": ["@opentui/core-linux-x64@0.1.54", "", { "os": "linux", "cpu": "x64" }, "sha512-S7BAq4CUV6ZfoXDSClJT75XxVSKPOOuRVYvBSHMOgwkBwLHpJZdz0Z4mzcGBBP1nJQ5Gz92TWPYfYMbZvR1lpw=="], + + "@opentui/core-win32-arm64": ["@opentui/core-win32-arm64@0.1.54", "", { "os": "win32", "cpu": "arm64" }, "sha512-K+E9i8t6YfN0Ly9moHefRQfR5GSbQUAsqzfrW4TD4bpJBy5y7EKh1mz8ZdES/RwWOSGUCb+JN7/ZQm0OubbdvQ=="], + + "@opentui/core-win32-x64": ["@opentui/core-win32-x64@0.1.54", "", { "os": "win32", "cpu": "x64" }, "sha512-0KsBPRtcqmPM1AoN2Ez9au6uf7y8631W9tXTWnVZRlI2/G3j1AfGReR6vuwrd8O4JfxFXiYWWPfSxYZvWLSRNg=="], + + "@opentui/solid": ["@opentui/solid@0.1.54", "", { "dependencies": { "@babel/core": "7.28.0", "@babel/preset-typescript": "7.27.1", "@opentui/core": "0.1.54", "babel-plugin-module-resolver": "5.0.2", "babel-preset-solid": "1.9.9", "s-js": "^0.4.9" }, "peerDependencies": { "solid-js": "1.9.9" } }, "sha512-rr9moI+W3meoD57t4Flyfw33mRSFIX0FOx+t4T3sLNA3Pz5FGU2n4qyxPc21OkAuc23S+YxuEuwbZebnIaLGWA=="], "@oslojs/asn1": ["@oslojs/asn1@1.0.0", "", { "dependencies": { "@oslojs/binary": "1.0.0" } }, "sha512-zw/wn0sj0j0QKbIXfIlnEcTviaCzYOY3V5rAyjR6YtOByFtJiT574+8p9Wlach0lZH9fddD4yb9laEAIl4vXQA=="], diff --git a/packages/opencode/package.json b/packages/opencode/package.json index e919f722e59..210a481efb5 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -64,8 +64,8 @@ "@opencode-ai/sdk": "workspace:*", "@opencode-ai/util": "workspace:*", "@openrouter/ai-sdk-provider": "1.2.8", - "@opentui/core": "0.1.55", - "@opentui/solid": "0.1.55", + "@opentui/core": "0.1.54", + "@opentui/solid": "0.1.54", "@parcel/watcher": "2.5.1", "@pierre/precision-diffs": "catalog:", "@solid-primitives/event-bus": "1.1.2", From 4d2b671d7bf3d1e68f6ad7f726ca07fae4696af9 Mon Sep 17 00:00:00 2001 From: Sebastian Herrlinger Date: Wed, 3 Dec 2025 03:16:32 +0100 Subject: [PATCH 17/26] actually bump opentui to v0.1.55 - fix scrollbox empty/blank last items at bottom - fix should not insert chars with modifiers in input/textarea anymore - do not wrap OSC4 palette sequences for tmux 3.6 --- bun.lock | 20 ++++++++++---------- packages/opencode/package.json | 4 ++-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/bun.lock b/bun.lock index d9caa4de70e..eb5eb69f0ea 100644 --- a/bun.lock +++ b/bun.lock @@ -238,8 +238,8 @@ "@opencode-ai/sdk": "workspace:*", "@opencode-ai/util": "workspace:*", "@openrouter/ai-sdk-provider": "1.2.8", - "@opentui/core": "0.1.54", - "@opentui/solid": "0.1.54", + "@opentui/core": "0.1.55", + "@opentui/solid": "0.1.55", "@parcel/watcher": "2.5.1", "@pierre/precision-diffs": "catalog:", "@solid-primitives/event-bus": "1.1.2", @@ -1088,21 +1088,21 @@ "@opentelemetry/api": ["@opentelemetry/api@1.9.0", "", {}, "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg=="], - "@opentui/core": ["@opentui/core@0.1.54", "", { "dependencies": { "bun-ffi-structs": "0.1.2", "diff": "8.0.2", "jimp": "1.6.0", "yoga-layout": "3.2.1" }, "optionalDependencies": { "@dimforge/rapier2d-simd-compat": "^0.17.3", "@opentui/core-darwin-arm64": "0.1.54", "@opentui/core-darwin-x64": "0.1.54", "@opentui/core-linux-arm64": "0.1.54", "@opentui/core-linux-x64": "0.1.54", "@opentui/core-win32-arm64": "0.1.54", "@opentui/core-win32-x64": "0.1.54", "bun-webgpu": "0.1.4", "planck": "^1.4.2", "three": "0.177.0" }, "peerDependencies": { "web-tree-sitter": "0.25.10" } }, "sha512-NYBVOmAa3JB+bSTxFTUc3Ej3B8Gc364DMsoktVRCYdjQ+AyeMRNdOTj9sMWdDJbXqITK/atrsUXouoE5bL9sWA=="], + "@opentui/core": ["@opentui/core@0.1.55", "", { "dependencies": { "bun-ffi-structs": "0.1.2", "diff": "8.0.2", "jimp": "1.6.0", "yoga-layout": "3.2.1" }, "optionalDependencies": { "@dimforge/rapier2d-simd-compat": "^0.17.3", "@opentui/core-darwin-arm64": "0.1.55", "@opentui/core-darwin-x64": "0.1.55", "@opentui/core-linux-arm64": "0.1.55", "@opentui/core-linux-x64": "0.1.55", "@opentui/core-win32-arm64": "0.1.55", "@opentui/core-win32-x64": "0.1.55", "bun-webgpu": "0.1.4", "planck": "^1.4.2", "three": "0.177.0" }, "peerDependencies": { "web-tree-sitter": "0.25.10" } }, "sha512-WafOO8eMf1/fmlFUfgooWyWJclQG5X/72VUebH+jN6/kSoSb91XJxHQgaKL9CQYFBNBIApQhAZn/sF9Qt60+lQ=="], - "@opentui/core-darwin-arm64": ["@opentui/core-darwin-arm64@0.1.54", "", { "os": "darwin", "cpu": "arm64" }, "sha512-LyJ2AI9XA3upckiXLaX/P6tB40pB6euZA5MCikyhwcDVew3Z7NpTI0xHp4gUWHwsSTwmx6u851ofgkf7nMBEJg=="], + "@opentui/core-darwin-arm64": ["@opentui/core-darwin-arm64@0.1.55", "", { "os": "darwin", "cpu": "arm64" }, "sha512-z2Prd/KKUbhPaSGBFv2q0nDtiLB/5oI3sGFDgf+YAfs6M6UfP9n0XkPUupbE1dx4lMyvwA9X8/QUnsQApd3E2g=="], - "@opentui/core-darwin-x64": ["@opentui/core-darwin-x64@0.1.54", "", { "os": "darwin", "cpu": "x64" }, "sha512-LZAjXR1OoUr8pewBTHqxupdPS4PC4qQCht0HHGEr1+zN7zu5c+kcp3Uop+NeQTYLjHJftiULukzAfLJMXFuDNA=="], + "@opentui/core-darwin-x64": ["@opentui/core-darwin-x64@0.1.55", "", { "os": "darwin", "cpu": "x64" }, "sha512-zjgGmIaTCWUvvQ9vIHJ0ypTkuFIA4ykKiZ16QxpG930bPr9fJ1xZ8MYj+6WSyuiao7tm6iWQfuYKT3tzA8+ItQ=="], - "@opentui/core-linux-arm64": ["@opentui/core-linux-arm64@0.1.54", "", { "os": "linux", "cpu": "arm64" }, "sha512-AC7qBYc4shY28/eR1BvguvfCjLzZJy0mdvadSdDF0XJJIe5vhWJ9UyKsoyLo7pwrd0iFBf5d7fg4kJcbLbZNWg=="], + "@opentui/core-linux-arm64": ["@opentui/core-linux-arm64@0.1.55", "", { "os": "linux", "cpu": "arm64" }, "sha512-77EZtLxH0VW/Kw+6kTs9FrFWfhjaIjsK/o39DAWM1ZNdFDTXAa/MQNOFDlBXbNHiNqPOyxd0tol1nUFLr8ZtZg=="], - "@opentui/core-linux-x64": ["@opentui/core-linux-x64@0.1.54", "", { "os": "linux", "cpu": "x64" }, "sha512-S7BAq4CUV6ZfoXDSClJT75XxVSKPOOuRVYvBSHMOgwkBwLHpJZdz0Z4mzcGBBP1nJQ5Gz92TWPYfYMbZvR1lpw=="], + "@opentui/core-linux-x64": ["@opentui/core-linux-x64@0.1.55", "", { "os": "linux", "cpu": "x64" }, "sha512-o4RB1jqKWx4TM9v2trGUij6H2ymJCxID8BK3HWvRIjd71tpKkaMY4SxaMWGzvK89X40u8v9qKE04dileKNa10w=="], - "@opentui/core-win32-arm64": ["@opentui/core-win32-arm64@0.1.54", "", { "os": "win32", "cpu": "arm64" }, "sha512-K+E9i8t6YfN0Ly9moHefRQfR5GSbQUAsqzfrW4TD4bpJBy5y7EKh1mz8ZdES/RwWOSGUCb+JN7/ZQm0OubbdvQ=="], + "@opentui/core-win32-arm64": ["@opentui/core-win32-arm64@0.1.55", "", { "os": "win32", "cpu": "arm64" }, "sha512-SYna371ZcQme6XjGI2ESHM2uMUZQRi9kgtJj5E22uH4wgBpPWFwf83EGWv78v+irvsypR+ZJgVfkwkz6JjgVTQ=="], - "@opentui/core-win32-x64": ["@opentui/core-win32-x64@0.1.54", "", { "os": "win32", "cpu": "x64" }, "sha512-0KsBPRtcqmPM1AoN2Ez9au6uf7y8631W9tXTWnVZRlI2/G3j1AfGReR6vuwrd8O4JfxFXiYWWPfSxYZvWLSRNg=="], + "@opentui/core-win32-x64": ["@opentui/core-win32-x64@0.1.55", "", { "os": "win32", "cpu": "x64" }, "sha512-ViPBCm+EtZ/4NmLqLAxcz31lVYGCe1ily+YmfAkoq1K/iuiXGhtD3mDrQuc3ayfTT8w5UwiYKyrUibJVJ/noVQ=="], - "@opentui/solid": ["@opentui/solid@0.1.54", "", { "dependencies": { "@babel/core": "7.28.0", "@babel/preset-typescript": "7.27.1", "@opentui/core": "0.1.54", "babel-plugin-module-resolver": "5.0.2", "babel-preset-solid": "1.9.9", "s-js": "^0.4.9" }, "peerDependencies": { "solid-js": "1.9.9" } }, "sha512-rr9moI+W3meoD57t4Flyfw33mRSFIX0FOx+t4T3sLNA3Pz5FGU2n4qyxPc21OkAuc23S+YxuEuwbZebnIaLGWA=="], + "@opentui/solid": ["@opentui/solid@0.1.55", "", { "dependencies": { "@babel/core": "7.28.0", "@babel/preset-typescript": "7.27.1", "@opentui/core": "0.1.55", "babel-plugin-module-resolver": "5.0.2", "babel-preset-solid": "1.9.9", "s-js": "^0.4.9" }, "peerDependencies": { "solid-js": "1.9.9" } }, "sha512-6NWOt0k32tu5KCiddLkPjVNWd++vW3QNbEccuGOdSiotO5TuwK4g0rcLAG6haPOB7Mf/l6aC06FQNeexpBqvtQ=="], "@oslojs/asn1": ["@oslojs/asn1@1.0.0", "", { "dependencies": { "@oslojs/binary": "1.0.0" } }, "sha512-zw/wn0sj0j0QKbIXfIlnEcTviaCzYOY3V5rAyjR6YtOByFtJiT574+8p9Wlach0lZH9fddD4yb9laEAIl4vXQA=="], diff --git a/packages/opencode/package.json b/packages/opencode/package.json index 210a481efb5..e919f722e59 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -64,8 +64,8 @@ "@opencode-ai/sdk": "workspace:*", "@opencode-ai/util": "workspace:*", "@openrouter/ai-sdk-provider": "1.2.8", - "@opentui/core": "0.1.54", - "@opentui/solid": "0.1.54", + "@opentui/core": "0.1.55", + "@opentui/solid": "0.1.55", "@parcel/watcher": "2.5.1", "@pierre/precision-diffs": "catalog:", "@solid-primitives/event-bus": "1.1.2", From 88235dc618765061d8c698cd07f5b16218cca912 Mon Sep 17 00:00:00 2001 From: Github Action Date: Wed, 3 Dec 2025 02:17:49 +0000 Subject: [PATCH 18/26] Update Nix flake.lock and hashes --- nix/hashes.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nix/hashes.json b/nix/hashes.json index 2fb77766343..7c7fc45f63e 100644 --- a/nix/hashes.json +++ b/nix/hashes.json @@ -1,3 +1,3 @@ { - "nodeModules": "sha256-33jZtQ/hb0JM6c0P1zJwSdZRjJyTC3hqEbhIUp8b0pA=" + "nodeModules": "sha256-QhqAa47P3Y2aoMGnr8l1nLq0EQb4qEm75dGfNjyzbpU=" } From 44cdde54220de25a8c9c3a57f45655299d85bf26 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 2 Dec 2025 21:52:12 -0500 Subject: [PATCH 19/26] zen: fix removing provider --- packages/console/core/src/provider.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/console/core/src/provider.ts b/packages/console/core/src/provider.ts index a59493e1c76..83461155b96 100644 --- a/packages/console/core/src/provider.ts +++ b/packages/console/core/src/provider.ts @@ -47,7 +47,7 @@ export namespace Provider { }), async ({ provider }) => { Actor.assertAdmin() - Database.use((tx) => + return Database.use((tx) => tx .delete(ProviderTable) .where(and(eq(ProviderTable.provider, provider), eq(ProviderTable.workspaceID, Actor.workspace()))), From f2fd0f8f009e9649e01b799c5c0758d5a3496536 Mon Sep 17 00:00:00 2001 From: Jason Cheatham Date: Tue, 2 Dec 2025 21:42:30 -0700 Subject: [PATCH 20/26] fix: handle `0` in ANSI theme color definitions (#5009) --- packages/opencode/src/cli/cmd/tui/context/theme.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/opencode/src/cli/cmd/tui/context/theme.tsx b/packages/opencode/src/cli/cmd/tui/context/theme.tsx index ed77e04b4fc..4223657ba0b 100644 --- a/packages/opencode/src/cli/cmd/tui/context/theme.tsx +++ b/packages/opencode/src/cli/cmd/tui/context/theme.tsx @@ -161,7 +161,7 @@ function resolveTheme(theme: ThemeJson, mode: "dark" | "light") { if (c.startsWith("#")) return RGBA.fromHex(c) - if (defs[c]) { + if (defs[c] != null) { return resolveColor(defs[c]) } else if (theme.theme[c as keyof ThemeColors] !== undefined) { return resolveColor(theme.theme[c as keyof ThemeColors]!) From 6c25e64658d2f3fbb047b4d19e8b959dae218551 Mon Sep 17 00:00:00 2001 From: Ben Vargas Date: Tue, 2 Dec 2025 21:50:21 -0700 Subject: [PATCH 21/26] fix: correct Provider type in chat.params plugin hook (#5003) --- packages/plugin/src/index.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/plugin/src/index.ts b/packages/plugin/src/index.ts index ab7aac251b3..291d68b794d 100644 --- a/packages/plugin/src/index.ts +++ b/packages/plugin/src/index.ts @@ -16,6 +16,12 @@ import { type ToolDefinition } from "./tool" export * from "./tool" +export type ProviderContext = { + source: "env" | "config" | "custom" | "api" + info: Provider + options: Record +} + export type PluginInput = { client: ReturnType project: Project @@ -153,7 +159,7 @@ export interface Hooks { * Modify parameters sent to LLM */ "chat.params"?: ( - input: { sessionID: string; agent: string; model: Model; provider: Provider; message: UserMessage }, + input: { sessionID: string; agent: string; model: Model; provider: ProviderContext; message: UserMessage }, output: { temperature: number; topP: number; options: Record }, ) => Promise "permission.ask"?: (input: Permission, output: { status: "ask" | "deny" | "allow" }) => Promise From 66e4a5a64e63e1db624b845e38a5b0848633c7ca Mon Sep 17 00:00:00 2001 From: Jason Cheatham Date: Tue, 2 Dec 2025 22:03:24 -0700 Subject: [PATCH 22/26] tweak: adjust light/dark theme toggle (#5007) --- packages/opencode/src/cli/cmd/tui/app.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/opencode/src/cli/cmd/tui/app.tsx b/packages/opencode/src/cli/cmd/tui/app.tsx index 8f3b47a39ab..30d7b5c6912 100644 --- a/packages/opencode/src/cli/cmd/tui/app.tsx +++ b/packages/opencode/src/cli/cmd/tui/app.tsx @@ -313,10 +313,11 @@ function App() { category: "System", }, { - title: `Switch to ${mode() === "dark" ? "light" : "dark"} mode`, + title: "Toggle appearance", value: "theme.switch_mode", - onSelect: () => { + onSelect: (dialog) => { setMode(mode() === "dark" ? "light" : "dark") + dialog.clear() }, category: "System", }, From b457923970ea7034d550e3371b92daae4c1b37b9 Mon Sep 17 00:00:00 2001 From: Aiden Cline Date: Tue, 2 Dec 2025 23:37:10 -0600 Subject: [PATCH 23/26] core: fix GitHub Copilot Enterprise authentication failing with sdk.chat undefined error --- packages/opencode/src/provider/provider.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts index 06e1257b97a..fef4677bc28 100644 --- a/packages/opencode/src/provider/provider.ts +++ b/packages/opencode/src/provider/provider.ts @@ -515,7 +515,7 @@ export namespace Provider { continue } - if (providerID === "github-copilot") { + if (providerID === "github-copilot" || providerID === "github-copilot-enterprise") { provider.info.npm = "@ai-sdk/github-copilot" } From 23ff6dbba4926d6564c82f2140165628861aaf34 Mon Sep 17 00:00:00 2001 From: opencode Date: Wed, 3 Dec 2025 11:39:04 +0000 Subject: [PATCH 24/26] release: v1.0.129 --- bun.lock | 30 +++++++++++++------------- packages/console/app/package.json | 2 +- packages/console/core/package.json | 2 +- packages/console/function/package.json | 2 +- packages/console/mail/package.json | 2 +- packages/desktop/package.json | 2 +- packages/enterprise/package.json | 2 +- packages/extensions/zed/extension.toml | 12 +++++------ packages/function/package.json | 2 +- packages/opencode/package.json | 2 +- packages/plugin/package.json | 4 ++-- packages/sdk/js/package.json | 4 ++-- packages/slack/package.json | 2 +- packages/tauri/package.json | 2 +- packages/ui/package.json | 2 +- packages/util/package.json | 2 +- packages/web/package.json | 2 +- sdks/vscode/package.json | 2 +- 18 files changed, 39 insertions(+), 39 deletions(-) diff --git a/bun.lock b/bun.lock index eb5eb69f0ea..714384ceb17 100644 --- a/bun.lock +++ b/bun.lock @@ -20,7 +20,7 @@ }, "packages/console/app": { "name": "@opencode-ai/console-app", - "version": "1.0.128", + "version": "1.0.129", "dependencies": { "@cloudflare/vite-plugin": "1.15.2", "@ibm/plex": "6.4.1", @@ -48,7 +48,7 @@ }, "packages/console/core": { "name": "@opencode-ai/console-core", - "version": "1.0.128", + "version": "1.0.129", "dependencies": { "@aws-sdk/client-sts": "3.782.0", "@jsx-email/render": "1.1.1", @@ -75,7 +75,7 @@ }, "packages/console/function": { "name": "@opencode-ai/console-function", - "version": "1.0.128", + "version": "1.0.129", "dependencies": { "@ai-sdk/anthropic": "2.0.0", "@ai-sdk/openai": "2.0.2", @@ -99,7 +99,7 @@ }, "packages/console/mail": { "name": "@opencode-ai/console-mail", - "version": "1.0.128", + "version": "1.0.129", "dependencies": { "@jsx-email/all": "2.2.3", "@jsx-email/cli": "1.4.3", @@ -123,7 +123,7 @@ }, "packages/desktop": { "name": "@opencode-ai/desktop", - "version": "1.0.128", + "version": "1.0.129", "dependencies": { "@kobalte/core": "catalog:", "@opencode-ai/sdk": "workspace:*", @@ -164,7 +164,7 @@ }, "packages/enterprise": { "name": "@opencode-ai/enterprise", - "version": "1.0.128", + "version": "1.0.129", "dependencies": { "@opencode-ai/ui": "workspace:*", "@opencode-ai/util": "workspace:*", @@ -192,7 +192,7 @@ }, "packages/function": { "name": "@opencode-ai/function", - "version": "1.0.128", + "version": "1.0.129", "dependencies": { "@octokit/auth-app": "8.0.1", "@octokit/rest": "22.0.0", @@ -208,7 +208,7 @@ }, "packages/opencode": { "name": "opencode", - "version": "1.0.128", + "version": "1.0.129", "bin": { "opencode": "./bin/opencode", }, @@ -297,7 +297,7 @@ }, "packages/plugin": { "name": "@opencode-ai/plugin", - "version": "1.0.128", + "version": "1.0.129", "dependencies": { "@opencode-ai/sdk": "workspace:*", "zod": "catalog:", @@ -317,7 +317,7 @@ }, "packages/sdk/js": { "name": "@opencode-ai/sdk", - "version": "1.0.128", + "version": "1.0.129", "devDependencies": { "@hey-api/openapi-ts": "0.81.0", "@tsconfig/node22": "catalog:", @@ -328,7 +328,7 @@ }, "packages/slack": { "name": "@opencode-ai/slack", - "version": "1.0.128", + "version": "1.0.129", "dependencies": { "@opencode-ai/sdk": "workspace:*", "@slack/bolt": "^3.17.1", @@ -341,7 +341,7 @@ }, "packages/tauri": { "name": "@opencode-ai/tauri", - "version": "1.0.128", + "version": "1.0.129", "dependencies": { "@tauri-apps/api": "^2", "@tauri-apps/plugin-opener": "^2", @@ -354,7 +354,7 @@ }, "packages/ui": { "name": "@opencode-ai/ui", - "version": "1.0.128", + "version": "1.0.129", "dependencies": { "@kobalte/core": "catalog:", "@opencode-ai/sdk": "workspace:*", @@ -386,7 +386,7 @@ }, "packages/util": { "name": "@opencode-ai/util", - "version": "1.0.128", + "version": "1.0.129", "dependencies": { "zod": "catalog:", }, @@ -397,7 +397,7 @@ }, "packages/web": { "name": "@opencode-ai/web", - "version": "1.0.128", + "version": "1.0.129", "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 a1cc0c79ef2..6db271e24b1 100644 --- a/packages/console/app/package.json +++ b/packages/console/app/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-app", - "version": "1.0.128", + "version": "1.0.129", "type": "module", "scripts": { "typecheck": "tsgo --noEmit", diff --git a/packages/console/core/package.json b/packages/console/core/package.json index d7230aa0701..69f4d14c352 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.0.128", + "version": "1.0.129", "private": true, "type": "module", "dependencies": { diff --git a/packages/console/function/package.json b/packages/console/function/package.json index 663f6952034..f175147e601 100644 --- a/packages/console/function/package.json +++ b/packages/console/function/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-function", - "version": "1.0.128", + "version": "1.0.129", "$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 0a451288b1d..5c9505cc903 100644 --- a/packages/console/mail/package.json +++ b/packages/console/mail/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-mail", - "version": "1.0.128", + "version": "1.0.129", "dependencies": { "@jsx-email/all": "2.2.3", "@jsx-email/cli": "1.4.3", diff --git a/packages/desktop/package.json b/packages/desktop/package.json index bf0b436fc79..4b797f62af6 100644 --- a/packages/desktop/package.json +++ b/packages/desktop/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/desktop", - "version": "1.0.128", + "version": "1.0.129", "description": "", "type": "module", "scripts": { diff --git a/packages/enterprise/package.json b/packages/enterprise/package.json index 35b7d8e0f9e..96c973b66f9 100644 --- a/packages/enterprise/package.json +++ b/packages/enterprise/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/enterprise", - "version": "1.0.128", + "version": "1.0.129", "private": true, "type": "module", "scripts": { diff --git a/packages/extensions/zed/extension.toml b/packages/extensions/zed/extension.toml index ffbc3c2b7a6..1a9788adb30 100644 --- a/packages/extensions/zed/extension.toml +++ b/packages/extensions/zed/extension.toml @@ -1,7 +1,7 @@ id = "opencode" name = "OpenCode" description = "The AI coding agent built for the terminal" -version = "1.0.128" +version = "1.0.129" schema_version = 1 authors = ["Anomaly"] repository = "https://github.com/sst/opencode" @@ -11,26 +11,26 @@ name = "OpenCode" icon = "./icons/opencode.svg" [agent_servers.opencode.targets.darwin-aarch64] -archive = "https://github.com/sst/opencode/releases/download/v1.0.128/opencode-darwin-arm64.zip" +archive = "https://github.com/sst/opencode/releases/download/v1.0.129/opencode-darwin-arm64.zip" cmd = "./opencode" args = ["acp"] [agent_servers.opencode.targets.darwin-x86_64] -archive = "https://github.com/sst/opencode/releases/download/v1.0.128/opencode-darwin-x64.zip" +archive = "https://github.com/sst/opencode/releases/download/v1.0.129/opencode-darwin-x64.zip" cmd = "./opencode" args = ["acp"] [agent_servers.opencode.targets.linux-aarch64] -archive = "https://github.com/sst/opencode/releases/download/v1.0.128/opencode-linux-arm64.zip" +archive = "https://github.com/sst/opencode/releases/download/v1.0.129/opencode-linux-arm64.zip" cmd = "./opencode" args = ["acp"] [agent_servers.opencode.targets.linux-x86_64] -archive = "https://github.com/sst/opencode/releases/download/v1.0.128/opencode-linux-x64.zip" +archive = "https://github.com/sst/opencode/releases/download/v1.0.129/opencode-linux-x64.zip" cmd = "./opencode" args = ["acp"] [agent_servers.opencode.targets.windows-x86_64] -archive = "https://github.com/sst/opencode/releases/download/v1.0.128/opencode-windows-x64.zip" +archive = "https://github.com/sst/opencode/releases/download/v1.0.129/opencode-windows-x64.zip" cmd = "./opencode.exe" args = ["acp"] diff --git a/packages/function/package.json b/packages/function/package.json index 67d867872df..7c886f44d86 100644 --- a/packages/function/package.json +++ b/packages/function/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/function", - "version": "1.0.128", + "version": "1.0.129", "$schema": "https://json.schemastore.org/package.json", "private": true, "type": "module", diff --git a/packages/opencode/package.json b/packages/opencode/package.json index e919f722e59..c3312e187d4 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.0.128", + "version": "1.0.129", "name": "opencode", "type": "module", "private": true, diff --git a/packages/plugin/package.json b/packages/plugin/package.json index 148273ddc18..8df84bfdcde 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.0.128", + "version": "1.0.129", "type": "module", "scripts": { "typecheck": "tsgo --noEmit", @@ -24,4 +24,4 @@ "typescript": "catalog:", "@typescript/native-preview": "catalog:" } -} +} \ No newline at end of file diff --git a/packages/sdk/js/package.json b/packages/sdk/js/package.json index ea30214854a..0995f119206 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.0.128", + "version": "1.0.129", "type": "module", "scripts": { "typecheck": "tsgo --noEmit", @@ -26,4 +26,4 @@ "publishConfig": { "directory": "dist" } -} +} \ No newline at end of file diff --git a/packages/slack/package.json b/packages/slack/package.json index 3b9a5d8b737..f81f9069f2b 100644 --- a/packages/slack/package.json +++ b/packages/slack/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/slack", - "version": "1.0.128", + "version": "1.0.129", "type": "module", "scripts": { "dev": "bun run src/index.ts", diff --git a/packages/tauri/package.json b/packages/tauri/package.json index b9e9412ecaf..01f42b4bfe1 100644 --- a/packages/tauri/package.json +++ b/packages/tauri/package.json @@ -1,7 +1,7 @@ { "name": "@opencode-ai/tauri", "private": true, - "version": "1.0.128", + "version": "1.0.129", "type": "module", "scripts": { "dev": "vite", diff --git a/packages/ui/package.json b/packages/ui/package.json index 705c6c94e23..78d7c226568 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/ui", - "version": "1.0.128", + "version": "1.0.129", "type": "module", "exports": { "./*": "./src/components/*.tsx", diff --git a/packages/util/package.json b/packages/util/package.json index 2e73d2cb90c..a9f365df5fc 100644 --- a/packages/util/package.json +++ b/packages/util/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/util", - "version": "1.0.128", + "version": "1.0.129", "private": true, "type": "module", "exports": { diff --git a/packages/web/package.json b/packages/web/package.json index c9e812b0c62..1789991fc32 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -1,7 +1,7 @@ { "name": "@opencode-ai/web", "type": "module", - "version": "1.0.128", + "version": "1.0.129", "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 244bccaef92..bc20f1a18b1 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.0.128", + "version": "1.0.129", "publisher": "sst-dev", "repository": { "type": "git", From 36da0dce582bc7805538c8031e68dcfc81525b7c Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" Date: Wed, 3 Dec 2025 11:47:44 +0000 Subject: [PATCH 25/26] sync: record last synced tag v1.0.129 --- .github/last-synced-tag | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/last-synced-tag b/.github/last-synced-tag index 85e1b342893..91dd8d56caa 100644 --- a/.github/last-synced-tag +++ b/.github/last-synced-tag @@ -1 +1 @@ -v1.0.128 +v1.0.129 From aaa1b57faeb1cab18cf9aea216d0ded5f5b17f70 Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" Date: Wed, 3 Dec 2025 11:49:40 +0000 Subject: [PATCH 26/26] Merged upstream v1.0.129, PR #79 ready Co-authored-by: kcrommett --- bun.lock | 50 +++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/bun.lock b/bun.lock index e0f4b9ebe36..f58f245bab9 100644 --- a/bun.lock +++ b/bun.lock @@ -20,7 +20,7 @@ }, "packages/console/app": { "name": "@opencode-ai/console-app", - "version": "1.0.128", + "version": "1.0.129", "dependencies": { "@cloudflare/vite-plugin": "1.15.2", "@ibm/plex": "6.4.1", @@ -48,7 +48,7 @@ }, "packages/console/core": { "name": "@opencode-ai/console-core", - "version": "1.0.128", + "version": "1.0.129", "dependencies": { "@aws-sdk/client-sts": "3.782.0", "@jsx-email/render": "1.1.1", @@ -75,7 +75,7 @@ }, "packages/console/function": { "name": "@opencode-ai/console-function", - "version": "1.0.128", + "version": "1.0.129", "dependencies": { "@ai-sdk/anthropic": "2.0.0", "@ai-sdk/openai": "2.0.2", @@ -99,7 +99,7 @@ }, "packages/console/mail": { "name": "@opencode-ai/console-mail", - "version": "1.0.128", + "version": "1.0.129", "dependencies": { "@jsx-email/all": "2.2.3", "@jsx-email/cli": "1.4.3", @@ -123,7 +123,7 @@ }, "packages/desktop": { "name": "@opencode-ai/desktop", - "version": "1.0.128", + "version": "1.0.129", "dependencies": { "@kobalte/core": "catalog:", "@opencode-ai/sdk": "workspace:*", @@ -164,7 +164,7 @@ }, "packages/enterprise": { "name": "@opencode-ai/enterprise", - "version": "1.0.128", + "version": "1.0.129", "dependencies": { "@opencode-ai/ui": "workspace:*", "@opencode-ai/util": "workspace:*", @@ -192,7 +192,7 @@ }, "packages/function": { "name": "@opencode-ai/function", - "version": "1.0.128", + "version": "1.0.129", "dependencies": { "@octokit/auth-app": "8.0.1", "@octokit/rest": "22.0.0", @@ -208,7 +208,7 @@ }, "packages/opencode": { "name": "opencode", - "version": "1.0.128", + "version": "1.0.129", "bin": { "opencode": "./bin/opencode", }, @@ -238,8 +238,8 @@ "@opencode-ai/sdk": "workspace:*", "@opencode-ai/util": "workspace:*", "@openrouter/ai-sdk-provider": "1.2.8", - "@opentui/core": "0.1.54", - "@opentui/solid": "0.1.54", + "@opentui/core": "0.1.55", + "@opentui/solid": "0.1.55", "@parcel/watcher": "2.5.1", "@pierre/precision-diffs": "catalog:", "@solid-primitives/event-bus": "1.1.2", @@ -298,7 +298,7 @@ }, "packages/plugin": { "name": "@opencode-ai/plugin", - "version": "1.0.128", + "version": "1.0.129", "dependencies": { "@opencode-ai/sdk": "workspace:*", "zod": "catalog:", @@ -318,7 +318,7 @@ }, "packages/sdk/js": { "name": "@opencode-ai/sdk", - "version": "1.0.128", + "version": "1.0.129", "devDependencies": { "@hey-api/openapi-ts": "0.81.0", "@tsconfig/node22": "catalog:", @@ -329,7 +329,7 @@ }, "packages/slack": { "name": "@opencode-ai/slack", - "version": "1.0.128", + "version": "1.0.129", "dependencies": { "@opencode-ai/sdk": "workspace:*", "@slack/bolt": "^3.17.1", @@ -342,7 +342,7 @@ }, "packages/tauri": { "name": "@opencode-ai/tauri", - "version": "1.0.128", + "version": "1.0.129", "dependencies": { "@tauri-apps/api": "^2", "@tauri-apps/plugin-opener": "^2", @@ -355,7 +355,7 @@ }, "packages/ui": { "name": "@opencode-ai/ui", - "version": "1.0.128", + "version": "1.0.129", "dependencies": { "@kobalte/core": "catalog:", "@opencode-ai/sdk": "workspace:*", @@ -387,7 +387,7 @@ }, "packages/util": { "name": "@opencode-ai/util", - "version": "1.0.128", + "version": "1.0.129", "dependencies": { "zod": "catalog:", }, @@ -398,7 +398,7 @@ }, "packages/web": { "name": "@opencode-ai/web", - "version": "1.0.128", + "version": "1.0.129", "dependencies": { "@astrojs/cloudflare": "12.6.3", "@astrojs/markdown-remark": "6.3.1", @@ -1087,21 +1087,21 @@ "@opentelemetry/api": ["@opentelemetry/api@1.9.0", "", {}, "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg=="], - "@opentui/core": ["@opentui/core@0.1.54", "", { "dependencies": { "bun-ffi-structs": "0.1.2", "diff": "8.0.2", "jimp": "1.6.0", "yoga-layout": "3.2.1" }, "optionalDependencies": { "@dimforge/rapier2d-simd-compat": "^0.17.3", "@opentui/core-darwin-arm64": "0.1.54", "@opentui/core-darwin-x64": "0.1.54", "@opentui/core-linux-arm64": "0.1.54", "@opentui/core-linux-x64": "0.1.54", "@opentui/core-win32-arm64": "0.1.54", "@opentui/core-win32-x64": "0.1.54", "bun-webgpu": "0.1.4", "planck": "^1.4.2", "three": "0.177.0" }, "peerDependencies": { "web-tree-sitter": "0.25.10" } }, "sha512-NYBVOmAa3JB+bSTxFTUc3Ej3B8Gc364DMsoktVRCYdjQ+AyeMRNdOTj9sMWdDJbXqITK/atrsUXouoE5bL9sWA=="], + "@opentui/core": ["@opentui/core@0.1.55", "", { "dependencies": { "bun-ffi-structs": "0.1.2", "diff": "8.0.2", "jimp": "1.6.0", "yoga-layout": "3.2.1" }, "optionalDependencies": { "@dimforge/rapier2d-simd-compat": "^0.17.3", "@opentui/core-darwin-arm64": "0.1.55", "@opentui/core-darwin-x64": "0.1.55", "@opentui/core-linux-arm64": "0.1.55", "@opentui/core-linux-x64": "0.1.55", "@opentui/core-win32-arm64": "0.1.55", "@opentui/core-win32-x64": "0.1.55", "bun-webgpu": "0.1.4", "planck": "^1.4.2", "three": "0.177.0" }, "peerDependencies": { "web-tree-sitter": "0.25.10" } }, "sha512-WafOO8eMf1/fmlFUfgooWyWJclQG5X/72VUebH+jN6/kSoSb91XJxHQgaKL9CQYFBNBIApQhAZn/sF9Qt60+lQ=="], - "@opentui/core-darwin-arm64": ["@opentui/core-darwin-arm64@0.1.54", "", { "os": "darwin", "cpu": "arm64" }, "sha512-LyJ2AI9XA3upckiXLaX/P6tB40pB6euZA5MCikyhwcDVew3Z7NpTI0xHp4gUWHwsSTwmx6u851ofgkf7nMBEJg=="], + "@opentui/core-darwin-arm64": ["@opentui/core-darwin-arm64@0.1.55", "", { "os": "darwin", "cpu": "arm64" }, "sha512-z2Prd/KKUbhPaSGBFv2q0nDtiLB/5oI3sGFDgf+YAfs6M6UfP9n0XkPUupbE1dx4lMyvwA9X8/QUnsQApd3E2g=="], - "@opentui/core-darwin-x64": ["@opentui/core-darwin-x64@0.1.54", "", { "os": "darwin", "cpu": "x64" }, "sha512-LZAjXR1OoUr8pewBTHqxupdPS4PC4qQCht0HHGEr1+zN7zu5c+kcp3Uop+NeQTYLjHJftiULukzAfLJMXFuDNA=="], + "@opentui/core-darwin-x64": ["@opentui/core-darwin-x64@0.1.55", "", { "os": "darwin", "cpu": "x64" }, "sha512-zjgGmIaTCWUvvQ9vIHJ0ypTkuFIA4ykKiZ16QxpG930bPr9fJ1xZ8MYj+6WSyuiao7tm6iWQfuYKT3tzA8+ItQ=="], - "@opentui/core-linux-arm64": ["@opentui/core-linux-arm64@0.1.54", "", { "os": "linux", "cpu": "arm64" }, "sha512-AC7qBYc4shY28/eR1BvguvfCjLzZJy0mdvadSdDF0XJJIe5vhWJ9UyKsoyLo7pwrd0iFBf5d7fg4kJcbLbZNWg=="], + "@opentui/core-linux-arm64": ["@opentui/core-linux-arm64@0.1.55", "", { "os": "linux", "cpu": "arm64" }, "sha512-77EZtLxH0VW/Kw+6kTs9FrFWfhjaIjsK/o39DAWM1ZNdFDTXAa/MQNOFDlBXbNHiNqPOyxd0tol1nUFLr8ZtZg=="], - "@opentui/core-linux-x64": ["@opentui/core-linux-x64@0.1.54", "", { "os": "linux", "cpu": "x64" }, "sha512-S7BAq4CUV6ZfoXDSClJT75XxVSKPOOuRVYvBSHMOgwkBwLHpJZdz0Z4mzcGBBP1nJQ5Gz92TWPYfYMbZvR1lpw=="], + "@opentui/core-linux-x64": ["@opentui/core-linux-x64@0.1.55", "", { "os": "linux", "cpu": "x64" }, "sha512-o4RB1jqKWx4TM9v2trGUij6H2ymJCxID8BK3HWvRIjd71tpKkaMY4SxaMWGzvK89X40u8v9qKE04dileKNa10w=="], - "@opentui/core-win32-arm64": ["@opentui/core-win32-arm64@0.1.54", "", { "os": "win32", "cpu": "arm64" }, "sha512-K+E9i8t6YfN0Ly9moHefRQfR5GSbQUAsqzfrW4TD4bpJBy5y7EKh1mz8ZdES/RwWOSGUCb+JN7/ZQm0OubbdvQ=="], + "@opentui/core-win32-arm64": ["@opentui/core-win32-arm64@0.1.55", "", { "os": "win32", "cpu": "arm64" }, "sha512-SYna371ZcQme6XjGI2ESHM2uMUZQRi9kgtJj5E22uH4wgBpPWFwf83EGWv78v+irvsypR+ZJgVfkwkz6JjgVTQ=="], - "@opentui/core-win32-x64": ["@opentui/core-win32-x64@0.1.54", "", { "os": "win32", "cpu": "x64" }, "sha512-0KsBPRtcqmPM1AoN2Ez9au6uf7y8631W9tXTWnVZRlI2/G3j1AfGReR6vuwrd8O4JfxFXiYWWPfSxYZvWLSRNg=="], + "@opentui/core-win32-x64": ["@opentui/core-win32-x64@0.1.55", "", { "os": "win32", "cpu": "x64" }, "sha512-ViPBCm+EtZ/4NmLqLAxcz31lVYGCe1ily+YmfAkoq1K/iuiXGhtD3mDrQuc3ayfTT8w5UwiYKyrUibJVJ/noVQ=="], - "@opentui/solid": ["@opentui/solid@0.1.54", "", { "dependencies": { "@babel/core": "7.28.0", "@babel/preset-typescript": "7.27.1", "@opentui/core": "0.1.54", "babel-plugin-module-resolver": "5.0.2", "babel-preset-solid": "1.9.9", "s-js": "^0.4.9" }, "peerDependencies": { "solid-js": "1.9.9" } }, "sha512-rr9moI+W3meoD57t4Flyfw33mRSFIX0FOx+t4T3sLNA3Pz5FGU2n4qyxPc21OkAuc23S+YxuEuwbZebnIaLGWA=="], + "@opentui/solid": ["@opentui/solid@0.1.55", "", { "dependencies": { "@babel/core": "7.28.0", "@babel/preset-typescript": "7.27.1", "@opentui/core": "0.1.55", "babel-plugin-module-resolver": "5.0.2", "babel-preset-solid": "1.9.9", "s-js": "^0.4.9" }, "peerDependencies": { "solid-js": "1.9.9" } }, "sha512-6NWOt0k32tu5KCiddLkPjVNWd++vW3QNbEccuGOdSiotO5TuwK4g0rcLAG6haPOB7Mf/l6aC06FQNeexpBqvtQ=="], "@oslojs/asn1": ["@oslojs/asn1@1.0.0", "", { "dependencies": { "@oslojs/binary": "1.0.0" } }, "sha512-zw/wn0sj0j0QKbIXfIlnEcTviaCzYOY3V5rAyjR6YtOByFtJiT574+8p9Wlach0lZH9fddD4yb9laEAIl4vXQA=="],