diff --git a/bun.lock b/bun.lock index f789eb74ef9..ca309ab9585 100644 --- a/bun.lock +++ b/bun.lock @@ -29,6 +29,7 @@ "opencode": "./bin/opencode", }, "dependencies": { + "@ai-sdk/groq": "1.2.9", "@clack/prompts": "0.11.0", "@hono/zod-validator": "0.4.2", "@modelcontextprotocol/sdk": "1.15.1", @@ -111,6 +112,8 @@ "@ai-sdk/gateway": ["@ai-sdk/gateway@1.0.0-beta.8", "", { "dependencies": { "@ai-sdk/provider": "2.0.0-beta.1", "@ai-sdk/provider-utils": "3.0.0-beta.3" }, "peerDependencies": { "zod": "^3.25.49 || ^4" } }, "sha512-D2SqYRT/42JTiRxUuiWtn5cYQFscpb9Z14UNvJx7lnurBUXx57zy7TbLH0h7O+WbCluTQN5G6146JpUZ/SRyzw=="], + "@ai-sdk/groq": ["@ai-sdk/groq@1.2.9", "", { "dependencies": { "@ai-sdk/provider": "1.1.3", "@ai-sdk/provider-utils": "2.2.8" }, "peerDependencies": { "zod": "^3.0.0" } }, "sha512-7MoDaxm8yWtiRbD1LipYZG0kBl+Xe0sv/EeyxnHnGPZappXdlgtdOgTZVjjXkT3nWP30jjZi9A45zoVrBMb3Xg=="], + "@ai-sdk/provider": ["@ai-sdk/provider@2.0.0-beta.1", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-Z8SPncMtS3RsoXITmT7NVwrAq6M44dmw0DoUOYJqNNtCu8iMWuxB8Nxsoqpa0uEEy9R1V1ZThJAXTYgjTUxl3w=="], "@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@3.0.0-beta.3", "", { "dependencies": { "@ai-sdk/provider": "2.0.0-beta.1", "@standard-schema/spec": "^1.0.0", "eventsource-parser": "^3.0.3", "zod-to-json-schema": "^3.24.1" }, "peerDependencies": { "zod": "^3.25.49 || ^4" } }, "sha512-4gZ392GxjzMF7TnReF2eTKhOSyiSS3ydRVq4I7jxkeV5sdEuMoH3gzfItmlctsqGxlMU1/+zKPwl5yYz9O2dzg=="], @@ -1687,6 +1690,10 @@ "@ai-sdk/anthropic/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@2.2.8", "", { "dependencies": { "@ai-sdk/provider": "1.1.3", "nanoid": "^3.3.8", "secure-json-parse": "^2.7.0" }, "peerDependencies": { "zod": "^3.23.8" } }, "sha512-fqhG+4sCVv8x7nFzYnFo19ryhAa3w096Kmc3hWxMQfW/TubPOmt3A6tYZhl4mUfQWWQMsuSkLrtjlWuXBVSGQA=="], + "@ai-sdk/groq/@ai-sdk/provider": ["@ai-sdk/provider@1.1.3", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-qZMxYJ0qqX/RfnuIaab+zp8UAeJn/ygXXAffR5I4N0n1IrvA6qBsjc8hXLmBiMV2zoXlifkacF7sEFnYnjBcqg=="], + + "@ai-sdk/groq/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@2.2.8", "", { "dependencies": { "@ai-sdk/provider": "1.1.3", "nanoid": "^3.3.8", "secure-json-parse": "^2.7.0" }, "peerDependencies": { "zod": "^3.23.8" } }, "sha512-fqhG+4sCVv8x7nFzYnFo19ryhAa3w096Kmc3hWxMQfW/TubPOmt3A6tYZhl4mUfQWWQMsuSkLrtjlWuXBVSGQA=="], + "@ampproject/remapping/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.29", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ=="], "@astrojs/mdx/@astrojs/markdown-remark": ["@astrojs/markdown-remark@6.3.2", "", { "dependencies": { "@astrojs/internal-helpers": "0.6.1", "@astrojs/prism": "3.3.0", "github-slugger": "^2.0.0", "hast-util-from-html": "^2.0.3", "hast-util-to-text": "^4.0.2", "import-meta-resolve": "^4.1.0", "js-yaml": "^4.1.0", "mdast-util-definitions": "^6.0.0", "rehype-raw": "^7.0.0", "rehype-stringify": "^10.0.1", "remark-gfm": "^4.0.1", "remark-parse": "^11.0.0", "remark-rehype": "^11.1.2", "remark-smartypants": "^3.0.2", "shiki": "^3.2.1", "smol-toml": "^1.3.1", "unified": "^11.0.5", "unist-util-remove-position": "^5.0.0", "unist-util-visit": "^5.0.0", "unist-util-visit-parents": "^6.0.1", "vfile": "^6.0.3" } }, "sha512-bO35JbWpVvyKRl7cmSJD822e8YA8ThR/YbUsciWNA7yTcqpIAL2hJDToWP5KcZBWxGT6IOdOkHSXARSNZc4l/Q=="], diff --git a/example/broken.ts b/example/broken.ts new file mode 100644 index 00000000000..9e3a39c3a42 --- /dev/null +++ b/example/broken.ts @@ -0,0 +1 @@ +console.log('broken'); diff --git a/example/cli.ts b/example/cli.ts new file mode 100644 index 00000000000..aeecd7fcc50 --- /dev/null +++ b/example/cli.ts @@ -0,0 +1 @@ +console.log('cli'); diff --git a/example/ink.tsx b/example/ink.tsx new file mode 100644 index 00000000000..f70aea7bbce --- /dev/null +++ b/example/ink.tsx @@ -0,0 +1 @@ +console.log('ink'); diff --git a/packages/opencode/package.json b/packages/opencode/package.json index 8541e0184d0..9e1cb2ed588 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -44,6 +44,7 @@ "xdg-basedir": "5.1.0", "yargs": "18.0.0", "zod": "catalog:", - "zod-openapi": "4.1.0" + "zod-openapi": "4.1.0", + "@ai-sdk/groq": "1.2.9" } } diff --git a/packages/opencode/src/bun/index.ts b/packages/opencode/src/bun/index.ts index eea467370c8..d5b099391d8 100644 --- a/packages/opencode/src/bun/index.ts +++ b/packages/opencode/src/bun/index.ts @@ -73,6 +73,7 @@ export namespace BunProc { // Let Bun handle registry resolution: // - If .npmrc files exist, Bun will use them automatically // - If no .npmrc files exist, Bun will default to https://registry.npmjs.org + // No need to pass --registry flag log.info("installing package using Bun's default registry resolution", { pkg, version }) await BunProc.run(args, { diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts index 1b9320aebd6..72e5fe9c07e 100644 --- a/packages/opencode/src/provider/provider.ts +++ b/packages/opencode/src/provider/provider.ts @@ -206,6 +206,12 @@ export namespace Provider { }, } }, + groq: async () => { + return { + autoload: false, + options: {}, + } + }, } const state = App.state("provider", async () => { diff --git a/packages/opencode/test/provider/groq.test.ts b/packages/opencode/test/provider/groq.test.ts new file mode 100644 index 00000000000..32709cfd4dc --- /dev/null +++ b/packages/opencode/test/provider/groq.test.ts @@ -0,0 +1,15 @@ +import { describe, test, expect } from "bun:test" +import { Provider } from "../../src/provider/provider" +import { App } from "../../src/app/app" + +process.env.GROQ_API_KEY = "test" + +describe("provider.groq", () => { + test("loads from env", async () => { + const providers = await App.provide({ cwd: process.cwd() }, async () => { + return await Provider.list() + }) + expect(providers["groq"]).toBeTruthy() + expect(providers["groq"].info.models["moonshotai/kimi-k2-instruct"]).toBeTruthy() + }) +})