Explorar el Código

Merge branch 'dev' into interleaved-fixes

Aiden Cline hace 4 meses
padre
commit
be178cecda

+ 2 - 2
bun.lock

@@ -241,7 +241,7 @@
         "@opencode-ai/script": "workspace:*",
         "@opencode-ai/sdk": "workspace:*",
         "@opencode-ai/util": "workspace:*",
-        "@openrouter/ai-sdk-provider": "1.2.8",
+        "@openrouter/ai-sdk-provider": "1.5.2",
         "@opentui/core": "0.1.60",
         "@opentui/solid": "0.1.60",
         "@parcel/watcher": "2.5.1",
@@ -1141,7 +1141,7 @@
 
     "@opencode-ai/web": ["@opencode-ai/web@workspace:packages/web"],
 
-    "@openrouter/ai-sdk-provider": ["@openrouter/ai-sdk-provider@1.2.8", "", { "dependencies": { "@openrouter/sdk": "^0.1.8" }, "peerDependencies": { "ai": "^5.0.0", "zod": "^3.24.1 || ^v4" } }, "sha512-pQT8AzZBKg9f4bkt4doF486ZlhK0XjKkevrLkiqYgfh1Jplovieu28nK4Y+xy3sF18/mxjqh9/2y6jh01qzLrA=="],
+    "@openrouter/ai-sdk-provider": ["@openrouter/ai-sdk-provider@1.5.2", "", { "dependencies": { "@openrouter/sdk": "^0.1.27" }, "peerDependencies": { "@toon-format/toon": "^2.0.0", "ai": "^5.0.0", "zod": "^3.24.1 || ^v4" }, "optionalPeers": ["@toon-format/toon"] }, "sha512-3Th0vmJ9pjnwcPc2H1f59Mb0LFvwaREZAScfOQIpUxAHjZ7ZawVKDP27qgsteZPmMYqccNMy4r4Y3kgUnNcKAg=="],
 
     "@openrouter/sdk": ["@openrouter/[email protected]", "", { "dependencies": { "zod": "^3.25.0 || ^4.0.0" } }, "sha512-RH//L10bSmc81q25zAZudiI4kNkLgxF2E+WU42vghp3N6TEvZ6F0jK7uT3tOxkEn91gzmMw9YVmDENy7SJsajQ=="],
 

+ 1 - 1
nix/hashes.json

@@ -1,3 +1,3 @@
 {
-  "nodeModules": "sha256-pwjePZClFKDhDr5xrTNCBlO0xTwxLQYiQYaIEd0FdQQ="
+  "nodeModules": "sha256-JT8J+Nd2kk0x46BcyotmBbM39tuKOW7VzXfOV3R3sqQ="
 }

+ 1 - 1
packages/console/app/src/routes/zen/util/handler.ts

@@ -588,7 +588,7 @@ export async function handler(
       tx
         .update(KeyTable)
         .set({ timeUsed: sql`now()` })
-        .where(eq(KeyTable.id, authInfo.apiKeyId)),
+        .where(and(eq(KeyTable.workspaceID, authInfo.workspaceID), eq(KeyTable.id, authInfo.apiKeyId))),
     )
   }
 

+ 1 - 1
packages/opencode/package.json

@@ -70,7 +70,7 @@
     "@opencode-ai/script": "workspace:*",
     "@opencode-ai/sdk": "workspace:*",
     "@opencode-ai/util": "workspace:*",
-    "@openrouter/ai-sdk-provider": "1.2.8",
+    "@openrouter/ai-sdk-provider": "1.5.2",
     "@opentui/core": "0.1.60",
     "@opentui/solid": "0.1.60",
     "@parcel/watcher": "2.5.1",

+ 16 - 16
packages/opencode/src/cli/cmd/tui/context/theme/orng.json

@@ -17,7 +17,7 @@
     "darkAccent": "#FFF7F1",
     "darkRed": "#e06c75",
     "darkOrange": "#EC5B2B",
-    "darkGreen": "#7fd88f",
+    "darkBlue": "#6ba1e6",
     "darkCyan": "#56b6c2",
     "darkYellow": "#e5c07b",
     "lightStep1": "#ffffff",
@@ -36,7 +36,7 @@
     "lightAccent": "#c94d24",
     "lightRed": "#d1383d",
     "lightOrange": "#EC5B2B",
-    "lightGreen": "#3d9a57",
+    "lightBlue": "#0062d1",
     "lightCyan": "#318795",
     "lightYellow": "#b0851f"
   },
@@ -62,8 +62,8 @@
       "light": "lightOrange"
     },
     "success": {
-      "dark": "darkGreen",
-      "light": "lightGreen"
+      "dark": "darkBlue",
+      "light": "lightBlue"
     },
     "info": {
       "dark": "darkCyan",
@@ -102,8 +102,8 @@
       "light": "lightStep6"
     },
     "diffAdded": {
-      "dark": "#4fd6be",
-      "light": "#1e725c"
+      "dark": "#6ba1e6",
+      "light": "#0062d1"
     },
     "diffRemoved": {
       "dark": "#c53b53",
@@ -118,16 +118,16 @@
       "light": "#7086b5"
     },
     "diffHighlightAdded": {
-      "dark": "#b8db87",
-      "light": "#4db380"
+      "dark": "#6ba1e6",
+      "light": "#0062d1"
     },
     "diffHighlightRemoved": {
       "dark": "#e26a75",
       "light": "#f52a65"
     },
     "diffAddedBg": {
-      "dark": "#20303b",
-      "light": "#d5e5d5"
+      "dark": "#1a2a3d",
+      "light": "#e0edfa"
     },
     "diffRemovedBg": {
       "dark": "#37222c",
@@ -142,8 +142,8 @@
       "light": "lightStep3"
     },
     "diffAddedLineNumberBg": {
-      "dark": "#1b2b34",
-      "light": "#c5d5c5"
+      "dark": "#162535",
+      "light": "#d0e5f5"
     },
     "diffRemovedLineNumberBg": {
       "dark": "#2d1f26",
@@ -166,8 +166,8 @@
       "light": "lightCyan"
     },
     "markdownCode": {
-      "dark": "darkGreen",
-      "light": "lightGreen"
+      "dark": "darkBlue",
+      "light": "lightBlue"
     },
     "markdownBlockQuote": {
       "dark": "#FFF7F1",
@@ -222,8 +222,8 @@
       "light": "lightRed"
     },
     "syntaxString": {
-      "dark": "darkGreen",
-      "light": "lightGreen"
+      "dark": "darkBlue",
+      "light": "lightBlue"
     },
     "syntaxNumber": {
       "dark": "#FFF7F1",

+ 3 - 3
packages/opencode/src/cli/cmd/tui/routes/session/footer.tsx

@@ -10,7 +10,7 @@ export function Footer() {
   const { theme } = useTheme()
   const sync = useSync()
   const route = useRoute()
-  const mcp = createMemo(() => Object.keys(sync.data.mcp))
+  const mcp = createMemo(() => Object.values(sync.data.mcp).filter((x) => x.status === "connected").length)
   const mcpError = createMemo(() => Object.values(sync.data.mcp).some((x) => x.status === "failed"))
   const lsp = createMemo(() => Object.keys(sync.data.lsp))
   const permissions = createMemo(() => {
@@ -66,7 +66,7 @@ export function Footer() {
             <text fg={theme.text}>
               <span style={{ fg: theme.success }}>•</span> {lsp().length} LSP
             </text>
-            <Show when={mcp().length}>
+            <Show when={mcp()}>
               <text fg={theme.text}>
                 <Switch>
                   <Match when={mcpError()}>
@@ -76,7 +76,7 @@ export function Footer() {
                     <span style={{ fg: theme.success }}>⊙ </span>
                   </Match>
                 </Switch>
-                {mcp().length} MCP
+                {mcp()} MCP
               </text>
             </Show>
             <text fg={theme.textMuted}>/status</text>

+ 5 - 4
packages/opencode/src/provider/transform.ts

@@ -227,11 +227,12 @@ export namespace ProviderTransform {
       result["promptCacheKey"] = sessionID
     }
 
-    if (
-      model.providerID === "google" ||
-      (model.providerID.startsWith("opencode") && model.api.id.includes("gemini-3"))
-    ) {
+    if (model.api.npm === "@openrouter/ai-sdk-provider" && model.api.id.includes("gemini-3")) {
+      result["reasoning"] = { effort: "high" }
+    }
+    if (model.api.npm === "@ai-sdk/google" || model.api.npm === "@ai-sdk/google-vertex") {
       result["thinkingConfig"] = {
+        thinkingLevel: "high",
         includeThoughts: true,
       }
     }

+ 6 - 3
packages/opencode/src/server/server.ts

@@ -1460,12 +1460,15 @@ export namespace Server {
             }
           }
 
-          const providers = mapValues(filteredProviders, (x) => Provider.fromModelsDevProvider(x))
-          const connected = await Provider.list().then((x) => Object.keys(x))
+          const connected = await Provider.list()
+          const providers = Object.assign(
+            mapValues(filteredProviders, (x) => Provider.fromModelsDevProvider(x)),
+            connected,
+          )
           return c.json({
             all: Object.values(providers),
             default: mapValues(providers, (item) => Provider.sort(Object.values(item.models))[0].id),
-            connected,
+            connected: Object.keys(connected),
           })
         },
       )

+ 9 - 6
packages/web/src/content/docs/ecosystem.mdx

@@ -15,12 +15,15 @@ You can also check out [awesome-opencode](https://github.com/awesome-opencode/aw
 
 ## Plugins
 
-| Name                                                                                              | Description                                                   |
-| ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------- |
-| [opencode-skills](https://github.com/malhashemi/opencode-skills)                                  | Manage and organize OpenCode skills and capabilities          |
-| [opencode-openai-codex-auth](https://github.com/numman-ali/opencode-openai-codex-auth)            | Use your ChatGPT Plus/Pro subscription instead of API credits |
-| [opencode-gemini-auth](https://github.com/jenslys/opencode-gemini-auth)                           | Use your existing Gemini plan instead of API billing          |
-| [opencode-dynamic-context-pruning](https://github.com/Tarquinen/opencode-dynamic-context-pruning) | Optimize token usage by pruning obsolete tool outputs         |
+| Name                                                                                              | Description                                                           |
+| ------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- |
+| [opencode-skills](https://github.com/malhashemi/opencode-skills)                                  | Manage and organize OpenCode skills and capabilities                  |
+| [opencode-type-inject](https://github.com/nick-vi/opencode-type-inject)                           | Auto-inject TypeScript/Svelte types into file reads with lookup tools |
+| [opencode-openai-codex-auth](https://github.com/numman-ali/opencode-openai-codex-auth)            | Use your ChatGPT Plus/Pro subscription instead of API credits         |
+| [opencode-gemini-auth](https://github.com/jenslys/opencode-gemini-auth)                           | Use your existing Gemini plan instead of API billing                  |
+| [opencode-antigravity-auth](https://github.com/NoeFabris/opencode-antigravity-auth)               | Use Antigravity's free models instead of API billing                  |
+| [opencode-dynamic-context-pruning](https://github.com/Tarquinen/opencode-dynamic-context-pruning) | Optimize token usage by pruning obsolete tool outputs                 |
+| [opencode-wakatime](https://github.com/angristan/opencode-wakatime)                               | Track OpenCode usage with Wakatime                                    |
 
 ---