From 0efdbc7484dc2fb4a4c5e29e2e67d104b307add3 Mon Sep 17 00:00:00 2001 From: Alexander Yue Date: Thu, 23 Jul 2026 17:10:56 -0700 Subject: [PATCH] fix(core): rebrand attribution headers and meta prompt introduced by v1.18.4 sync --- packages/core/src/plugin/provider/cerebras.ts | 2 +- packages/core/src/plugin/provider/kilo.ts | 4 ++-- packages/core/src/plugin/provider/llmgateway.ts | 6 +++--- packages/core/src/plugin/provider/nvidia.ts | 4 ++-- packages/core/src/plugin/provider/openrouter.ts | 4 ++-- packages/core/src/plugin/provider/vercel.ts | 4 ++-- packages/core/src/plugin/provider/zenmux.ts | 4 ++-- packages/core/test/plugin/provider-cerebras.test.ts | 2 +- packages/core/test/plugin/provider-kilo.test.ts | 12 ++++++------ .../core/test/plugin/provider-llmgateway.test.ts | 6 +++--- packages/core/test/plugin/provider-nvidia.test.ts | 12 ++++++------ .../core/test/plugin/provider-openrouter.test.ts | 4 ++-- packages/core/test/plugin/provider-vercel.test.ts | 4 ++-- packages/core/test/plugin/provider-zenmux.test.ts | 6 +++--- packages/opencode/src/session/prompt/meta.txt | 10 +++++----- 15 files changed, 42 insertions(+), 42 deletions(-) diff --git a/packages/core/src/plugin/provider/cerebras.ts b/packages/core/src/plugin/provider/cerebras.ts index 0fd651160f..e8c916b60c 100644 --- a/packages/core/src/plugin/provider/cerebras.ts +++ b/packages/core/src/plugin/provider/cerebras.ts @@ -10,7 +10,7 @@ export const CerebrasPlugin = define({ if (item.provider.api.type !== "aisdk") continue if (item.provider.api.package !== "@ai-sdk/cerebras") continue evt.provider.update(item.provider.id, (provider) => { - provider.request.headers["X-Cerebras-3rd-Party-Integration"] = "opencode" + provider.request.headers["X-Cerebras-3rd-Party-Integration"] = "bcode" }) } }), diff --git a/packages/core/src/plugin/provider/kilo.ts b/packages/core/src/plugin/provider/kilo.ts index 6ee6670ee5..6992a00703 100644 --- a/packages/core/src/plugin/provider/kilo.ts +++ b/packages/core/src/plugin/provider/kilo.ts @@ -11,8 +11,8 @@ export const KiloPlugin = define({ if (item.provider.api.package !== "@ai-sdk/openai-compatible") continue if (item.provider.api.url !== "https://api.kilo.ai/api/gateway") continue evt.provider.update(item.provider.id, (provider) => { - provider.request.headers["HTTP-Referer"] = "https://opencode.ai/" - provider.request.headers["X-Title"] = "opencode" + provider.request.headers["HTTP-Referer"] = "https://bcode.sh/" + provider.request.headers["X-Title"] = "bcode" }) } }), diff --git a/packages/core/src/plugin/provider/llmgateway.ts b/packages/core/src/plugin/provider/llmgateway.ts index eafc5edd6c..875f07f066 100644 --- a/packages/core/src/plugin/provider/llmgateway.ts +++ b/packages/core/src/plugin/provider/llmgateway.ts @@ -15,9 +15,9 @@ export const LLMGatewayPlugin = define({ if (item.provider.api.url !== "https://api.llmgateway.io/v1") continue if (!(yield* integrations.get(Integration.ID.make(item.provider.id)))) continue evt.provider.update(item.provider.id, (provider) => { - provider.request.headers["HTTP-Referer"] = "https://opencode.ai/" - provider.request.headers["X-Title"] = "opencode" - provider.request.headers["X-Source"] = "opencode" + provider.request.headers["HTTP-Referer"] = "https://bcode.sh/" + provider.request.headers["X-Title"] = "bcode" + provider.request.headers["X-Source"] = "bcode" }) } }), diff --git a/packages/core/src/plugin/provider/nvidia.ts b/packages/core/src/plugin/provider/nvidia.ts index 449599727c..0a209c1d77 100644 --- a/packages/core/src/plugin/provider/nvidia.ts +++ b/packages/core/src/plugin/provider/nvidia.ts @@ -11,8 +11,8 @@ export const NvidiaPlugin = define({ if (item.provider.api.package !== "@ai-sdk/openai-compatible") continue if (item.provider.api.url !== "https://integrate.api.nvidia.com/v1") continue evt.provider.update(item.provider.id, (provider) => { - provider.request.headers["HTTP-Referer"] = "https://opencode.ai/" - provider.request.headers["X-Title"] = "opencode" + provider.request.headers["HTTP-Referer"] = "https://bcode.sh/" + provider.request.headers["X-Title"] = "bcode" provider.request.headers["X-BILLING-INVOKE-ORIGIN"] ??= "OpenCode" }) } diff --git a/packages/core/src/plugin/provider/openrouter.ts b/packages/core/src/plugin/provider/openrouter.ts index 0f295fb095..9f840d6ae1 100644 --- a/packages/core/src/plugin/provider/openrouter.ts +++ b/packages/core/src/plugin/provider/openrouter.ts @@ -11,8 +11,8 @@ export const OpenRouterPlugin = define({ if (item.provider.api.type !== "aisdk") continue if (item.provider.api.package !== "@openrouter/ai-sdk-provider") continue evt.provider.update(item.provider.id, (provider) => { - provider.request.headers["HTTP-Referer"] = "https://opencode.ai/" - provider.request.headers["X-Title"] = "opencode" + provider.request.headers["HTTP-Referer"] = "https://bcode.sh/" + provider.request.headers["X-Title"] = "bcode" }) for (const modelID of [ModelV2.ID.make("gpt-5-chat-latest"), ModelV2.ID.make("openai/gpt-5-chat")]) { if (!item.models.has(modelID)) continue diff --git a/packages/core/src/plugin/provider/vercel.ts b/packages/core/src/plugin/provider/vercel.ts index 00f5601430..40c11f0c96 100644 --- a/packages/core/src/plugin/provider/vercel.ts +++ b/packages/core/src/plugin/provider/vercel.ts @@ -10,8 +10,8 @@ export const VercelPlugin = define({ if (item.provider.api.type !== "aisdk") continue if (item.provider.api.package !== "@ai-sdk/vercel") continue evt.provider.update(item.provider.id, (provider) => { - provider.request.headers["http-referer"] = "https://opencode.ai/" - provider.request.headers["x-title"] = "opencode" + provider.request.headers["http-referer"] = "https://bcode.sh/" + provider.request.headers["x-title"] = "bcode" }) } }), diff --git a/packages/core/src/plugin/provider/zenmux.ts b/packages/core/src/plugin/provider/zenmux.ts index 29adebc0ee..f123a02a76 100644 --- a/packages/core/src/plugin/provider/zenmux.ts +++ b/packages/core/src/plugin/provider/zenmux.ts @@ -11,8 +11,8 @@ export const ZenmuxPlugin = define({ if (item.provider.api.package !== "@ai-sdk/openai-compatible") continue if (item.provider.api.url !== "https://zenmux.ai/api/v1") continue evt.provider.update(item.provider.id, (provider) => { - provider.request.headers["HTTP-Referer"] ??= "https://opencode.ai/" - provider.request.headers["X-Title"] ??= "opencode" + provider.request.headers["HTTP-Referer"] ??= "https://bcode.sh/" + provider.request.headers["X-Title"] ??= "bcode" }) } }), diff --git a/packages/core/test/plugin/provider-cerebras.test.ts b/packages/core/test/plugin/provider-cerebras.test.ts index adcc1779b0..6f23b14696 100644 --- a/packages/core/test/plugin/provider-cerebras.test.ts +++ b/packages/core/test/plugin/provider-cerebras.test.ts @@ -43,7 +43,7 @@ describe("CerebrasPlugin", () => { yield* addPlugin() expect((yield* catalog.provider.get(ProviderV2.ID.make("cerebras")))?.request.headers).toEqual({ Existing: "1", - "X-Cerebras-3rd-Party-Integration": "opencode", + "X-Cerebras-3rd-Party-Integration": "bcode", }) }), ) diff --git a/packages/core/test/plugin/provider-kilo.test.ts b/packages/core/test/plugin/provider-kilo.test.ts index 1df0fd3156..bdf9a23cca 100644 --- a/packages/core/test/plugin/provider-kilo.test.ts +++ b/packages/core/test/plugin/provider-kilo.test.ts @@ -39,8 +39,8 @@ describe("KiloPlugin", () => { yield* addPlugin() expect((yield* catalog.provider.get(ProviderV2.ID.make("kilo")))?.request.headers).toEqual({ Existing: "value", - "HTTP-Referer": "https://opencode.ai/", - "X-Title": "opencode", + "HTTP-Referer": "https://bcode.sh/", + "X-Title": "bcode", }) expect((yield* catalog.provider.get(ProviderV2.ID.openrouter))?.request.headers).toEqual({}) }), @@ -61,8 +61,8 @@ describe("KiloPlugin", () => { yield* addPlugin() expect((yield* catalog.provider.get(ProviderV2.ID.make("kilo")))?.request.headers).toEqual({ - "HTTP-Referer": "https://opencode.ai/", - "X-Title": "opencode", + "HTTP-Referer": "https://bcode.sh/", + "X-Title": "bcode", }) expect((yield* catalog.provider.get(ProviderV2.ID.make("kilo")))?.request.headers).not.toHaveProperty( "http-referer", @@ -90,8 +90,8 @@ describe("KiloPlugin", () => { yield* addPlugin() expect((yield* catalog.provider.get(ProviderV2.ID.make("kilo")))?.request.headers).toEqual({ - "HTTP-Referer": "https://opencode.ai/", - "X-Title": "opencode", + "HTTP-Referer": "https://bcode.sh/", + "X-Title": "bcode", }) expect((yield* catalog.provider.get(ProviderV2.ID.make("custom-kilo")))?.request.headers).toEqual({}) }), diff --git a/packages/core/test/plugin/provider-llmgateway.test.ts b/packages/core/test/plugin/provider-llmgateway.test.ts index d7f9d0d73d..02678aabfc 100644 --- a/packages/core/test/plugin/provider-llmgateway.test.ts +++ b/packages/core/test/plugin/provider-llmgateway.test.ts @@ -46,9 +46,9 @@ describe("LLMGatewayPlugin", () => { yield* addPlugin() expect((yield* catalog.provider.get(ProviderV2.ID.make("llmgateway")))?.request.headers).toEqual({ Existing: "value", - "HTTP-Referer": "https://opencode.ai/", - "X-Title": "opencode", - "X-Source": "opencode", + "HTTP-Referer": "https://bcode.sh/", + "X-Title": "bcode", + "X-Source": "bcode", }) expect((yield* catalog.provider.get(ProviderV2.ID.openrouter))?.request.headers).toEqual({}) }), diff --git a/packages/core/test/plugin/provider-nvidia.test.ts b/packages/core/test/plugin/provider-nvidia.test.ts index a1c05df335..8215ac0382 100644 --- a/packages/core/test/plugin/provider-nvidia.test.ts +++ b/packages/core/test/plugin/provider-nvidia.test.ts @@ -39,8 +39,8 @@ describe("NvidiaPlugin", () => { yield* addPlugin() expect((yield* catalog.provider.get(ProviderV2.ID.make("nvidia")))?.request.headers).toEqual({ Existing: "value", - "HTTP-Referer": "https://opencode.ai/", - "X-Title": "opencode", + "HTTP-Referer": "https://bcode.sh/", + "X-Title": "bcode", "X-BILLING-INVOKE-ORIGIN": "OpenCode", }) expect((yield* catalog.provider.get(ProviderV2.ID.openrouter))?.request.headers).toEqual({}) @@ -62,8 +62,8 @@ describe("NvidiaPlugin", () => { yield* addPlugin() expect((yield* catalog.provider.get(ProviderV2.ID.make("nvidia")))?.request.headers).toEqual({ - "HTTP-Referer": "https://opencode.ai/", - "X-Title": "opencode", + "HTTP-Referer": "https://bcode.sh/", + "X-Title": "bcode", "X-BILLING-INVOKE-ORIGIN": "OpenCode", }) }), @@ -88,8 +88,8 @@ describe("NvidiaPlugin", () => { yield* addPlugin() expect((yield* catalog.provider.get(ProviderV2.ID.make("nvidia")))?.request.headers).toEqual({ - "HTTP-Referer": "https://opencode.ai/", - "X-Title": "opencode", + "HTTP-Referer": "https://bcode.sh/", + "X-Title": "bcode", "X-BILLING-INVOKE-ORIGIN": "CustomOrigin", }) }), diff --git a/packages/core/test/plugin/provider-openrouter.test.ts b/packages/core/test/plugin/provider-openrouter.test.ts index 953943673f..17c2f0b3be 100644 --- a/packages/core/test/plugin/provider-openrouter.test.ts +++ b/packages/core/test/plugin/provider-openrouter.test.ts @@ -39,8 +39,8 @@ describe("OpenRouterPlugin", () => { expect((yield* catalog.provider.get(ProviderV2.ID.openrouter))?.request.headers).toEqual({ Existing: "value", - "HTTP-Referer": "https://opencode.ai/", - "X-Title": "opencode", + "HTTP-Referer": "https://bcode.sh/", + "X-Title": "bcode", }) expect((yield* catalog.provider.get(ProviderV2.ID.make("nvidia")))?.request.headers).toEqual({}) }), diff --git a/packages/core/test/plugin/provider-vercel.test.ts b/packages/core/test/plugin/provider-vercel.test.ts index eb87b15132..56258770c7 100644 --- a/packages/core/test/plugin/provider-vercel.test.ts +++ b/packages/core/test/plugin/provider-vercel.test.ts @@ -32,8 +32,8 @@ describe("VercelPlugin", () => { yield* addPlugin() expect((yield* catalog.provider.get(ProviderV2.ID.make("vercel")))?.request.headers).toEqual({ Existing: "1", - "http-referer": "https://opencode.ai/", - "x-title": "opencode", + "http-referer": "https://bcode.sh/", + "x-title": "bcode", }) }), ) diff --git a/packages/core/test/plugin/provider-zenmux.test.ts b/packages/core/test/plugin/provider-zenmux.test.ts index b9d34a1f5b..9640be8776 100644 --- a/packages/core/test/plugin/provider-zenmux.test.ts +++ b/packages/core/test/plugin/provider-zenmux.test.ts @@ -41,7 +41,7 @@ describe("ZenmuxPlugin", () => { }) yield* addPlugin() const result = required(yield* catalog.provider.get(ProviderV2.ID.make("zenmux"))) - expect(result.request.headers).toEqual({ "HTTP-Referer": "https://opencode.ai/", "X-Title": "opencode" }) + expect(result.request.headers).toEqual({ "HTTP-Referer": "https://bcode.sh/", "X-Title": "bcode" }) expect(Object.keys(result.request.headers).sort()).toEqual(["HTTP-Referer", "X-Title"]) }), ) @@ -63,8 +63,8 @@ describe("ZenmuxPlugin", () => { expect(required(yield* catalog.provider.get(ProviderV2.ID.make("zenmux"))).request.headers).toEqual({ Existing: "value", - "HTTP-Referer": "https://opencode.ai/", - "X-Title": "opencode", + "HTTP-Referer": "https://bcode.sh/", + "X-Title": "bcode", }) }), ) diff --git a/packages/opencode/src/session/prompt/meta.txt b/packages/opencode/src/session/prompt/meta.txt index 8f0c926c03..ec6fd7edd9 100644 --- a/packages/opencode/src/session/prompt/meta.txt +++ b/packages/opencode/src/session/prompt/meta.txt @@ -1,20 +1,20 @@ -You are OpenCode, the best coding agent on the planet. +You are BrowserCode, the best coding agent on the planet. You are based on a large language model trained by Meta MSL named Muse Spark. -When asked who you are, identify yourself as OpenCode powered by Meta Muse Spark by name. +When asked who you are, identify yourself as BrowserCode powered by Meta Muse Spark by name. You are an interactive CLI tool that helps users with software engineering tasks. Use the instructions below and the tools available to you to assist the user. IMPORTANT: You must NEVER generate or guess URLs for the user unless you are confident that the URLs are for helping the user with programming. You may use URLs provided by the user in their messages or local files. If the user asks for help or wants to give feedback inform them of the following: - ctrl+p to list available actions - To give feedback, users should report the issue at - https://github.com/anomalyco/opencode -When the user directly asks about OpenCode (eg. "can OpenCode do...", "does OpenCode have..."), or asks in second person (eg. "are you able...", "can you do..."), or asks how to use a specific OpenCode feature (eg. implement a hook, write a slash command, or install an MCP server), use the WebFetch tool to gather information to answer the question from OpenCode docs. The list of available docs is available at https://opencode.ai/docs + https://github.com/browser-use/browsercode/issues +When the user directly asks about BrowserCode (eg. "can BrowserCode do...", "does BrowserCode have..."), or asks in second person (eg. "are you able...", "can you do..."), or asks how to use a specific BrowserCode feature (eg. implement a hook, write a slash command, or install an MCP server), point them at the project README at https://github.com/browser-use/browsercode. BrowserCode is a fork of OpenCode (https://github.com/anomalyco/opencode) — generic OpenCode features are likely still applicable, but BrowserCode-specific features (the browser_execute tool, the harness, cloud integrations) live in the BrowserCode repo. # Tone and style - Only use emojis if the user explicitly requests it. Avoid using emojis in all communication unless asked. - Your output will be displayed on a command line interface. Your responses should be short and concise. You can use GitHub-flavored markdown for formatting, and will be rendered in a monospace font using the CommonMark specification. - Output text to communicate with the user; all text you output outside of tool use is displayed to the user. Only use tools to complete tasks. Never use tools like Bash or code comments as means to communicate with the user during the session. - NEVER create files unless they're absolutely necessary for achieving your goal. ALWAYS prefer editing an existing file to creating a new one. This includes markdown files. # Professional objectivity -Prioritize technical accuracy and truthfulness over validating the user's beliefs. Focus on facts and problem-solving, providing direct, objective technical info without any unnecessary superlatives, praise, or emotional validation. It is best for the user if OpenCode honestly applies the same rigorous standards to all ideas and disagrees when necessary, even if it may not be what the user wants to hear. Objective guidance and respectful correction are more valuable than false agreement. Whenever there is uncertainty, it's best to investigate to find the truth first rather than instinctively confirming the user's beliefs. +Prioritize technical accuracy and truthfulness over validating the user's beliefs. Focus on facts and problem-solving, providing direct, objective technical info without any unnecessary superlatives, praise, or emotional validation. It is best for the user if BrowserCode honestly applies the same rigorous standards to all ideas and disagrees when necessary, even if it may not be what the user wants to hear. Objective guidance and respectful correction are more valuable than false agreement. Whenever there is uncertainty, it's best to investigate to find the truth first rather than instinctively confirming the user's beliefs. # Task Management You have access to the TodoWrite tools to help you manage and plan tasks. Use these tools VERY frequently to ensure that you are tracking your tasks and giving the user visibility into your progress. These tools are also EXTREMELY helpful for planning tasks, and for breaking down larger complex tasks into smaller steps. If you do not use this tool when planning, you may forget to do important tasks - and that is unacceptable.