From 3b484e96b449049752f26f03b9ff7130feb5f163 Mon Sep 17 00:00:00 2001 From: Saatvik Arya Date: Thu, 5 Feb 2026 15:28:26 +0530 Subject: [PATCH 01/22] feat(tooling): bash rc and plugin tool context --- packages/opencode/src/cli/cmd/debug/agent.ts | 1 + packages/opencode/src/session/prompt.ts | 156 +++++------------- packages/opencode/src/shell/shell.ts | 128 ++++++++++++++ packages/opencode/src/tool/bash.ts | 102 ++++-------- packages/opencode/src/tool/registry.ts | 16 +- packages/opencode/src/tool/task.ts | 11 +- packages/opencode/src/tool/tool.ts | 1 + .../opencode/test/tool/apply_patch.test.ts | 2 + packages/opencode/test/tool/bash.test.ts | 2 + .../test/tool/external-directory.test.ts | 2 + packages/opencode/test/tool/fixtures/model.ts | 4 + packages/opencode/test/tool/grep.test.ts | 2 + packages/opencode/test/tool/question.test.ts | 2 + packages/opencode/test/tool/read.test.ts | 2 + packages/plugin/src/index.ts | 4 +- packages/plugin/src/tool.ts | 1 + 16 files changed, 238 insertions(+), 198 deletions(-) create mode 100644 packages/opencode/test/tool/fixtures/model.ts diff --git a/packages/opencode/src/cli/cmd/debug/agent.ts b/packages/opencode/src/cli/cmd/debug/agent.ts index fe3003485976..6836ceb2b051 100644 --- a/packages/opencode/src/cli/cmd/debug/agent.ts +++ b/packages/opencode/src/cli/cmd/debug/agent.ts @@ -152,6 +152,7 @@ async function createToolContext(agent: Agent.Info) { messageID, callID: Identifier.ascending("part"), agent: agent.name, + model, abort: new AbortController().signal, messages: [], metadata: () => {}, diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index be813e823fb0..8bf132bb23de 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -29,7 +29,6 @@ import { ReadTool } from "../tool/read" import { FileTime } from "../file/time" import { Flag } from "../flag/flag" import { ulid } from "ulid" -import { spawn } from "child_process" import { Command } from "../command" import { $, fileURLToPath, pathToFileURL } from "bun" import { ConfigMarkdown } from "../config/markdown" @@ -422,6 +421,7 @@ export namespace SessionPrompt { sessionID: sessionID, abort, callID: part.callID, + model: { providerID: taskModel.providerID, modelID: taskModel.id }, extra: { bypassAgentCheck: true }, messages: msgs, async metadata(input) { @@ -746,7 +746,8 @@ export namespace SessionPrompt { abort: options.abortSignal!, messageID: input.processor.message.id, callID: options.toolCallId, - extra: { model: input.model, bypassAgentCheck: input.bypassAgentCheck }, + model: { providerID: input.model.providerID, modelID: input.model.id }, + extra: { bypassAgentCheck: input.bypassAgentCheck }, agent: input.agent.name, messages: input.messages, metadata: async (val: { title?: string; metadata?: any }) => { @@ -1135,13 +1136,14 @@ export namespace SessionPrompt { await ReadTool.init() .then(async (t) => { - const model = await Provider.getModel(info.model.providerID, info.model.modelID) + const model = info.model ?? (await Provider.defaultModel()) const readCtx: Tool.Context = { sessionID: input.sessionID, abort: new AbortController().signal, agent: input.agent!, messageID: info.id, - extra: { bypassCwdCheck: true, model }, + model, + extra: { bypassCwdCheck: true }, messages: [], metadata: async () => {}, ask: async () => {}, @@ -1198,11 +1200,13 @@ export namespace SessionPrompt { if (part.mime === "application/x-directory") { const args = { filePath: filepath } + const model = info.model ?? (await Provider.defaultModel()) const listCtx: Tool.Context = { sessionID: input.sessionID, abort: new AbortController().signal, agent: input.agent!, messageID: info.id, + model, extra: { bypassCwdCheck: true }, messages: [], metadata: async () => {}, @@ -1328,6 +1332,17 @@ export namespace SessionPrompt { const userMessage = input.messages.findLast((msg) => msg.info.role === "user") if (!userMessage) return input.messages + // If agent has a reminder configured (string), inject it + if (typeof input.agent.reminder === "string") { + userMessage.parts.push({ + id: Identifier.ascending("part"), + messageID: userMessage.info.id, + sessionID: userMessage.info.sessionID, + type: "text", + text: input.agent.reminder, + synthetic: true, + }) + } // Original logic when experimental plan mode is disabled if (!Flag.OPENCODE_EXPERIMENTAL_PLAN_MODE) { if (input.agent.name === "plan") { @@ -1568,124 +1583,29 @@ NOTE: At any point in time through this workflow you should feel free to ask the }, } await Session.updatePart(part) - const shell = Shell.preferred() - const shellName = ( - process.platform === "win32" ? path.win32.basename(shell, ".exe") : path.basename(shell) - ).toLowerCase() - - const invocations: Record = { - nu: { - args: ["-c", input.command], - }, - fish: { - args: ["-c", input.command], - }, - zsh: { - args: [ - "-c", - "-l", - ` - [[ -f ~/.zshenv ]] && source ~/.zshenv >/dev/null 2>&1 || true - [[ -f "\${ZDOTDIR:-$HOME}/.zshrc" ]] && source "\${ZDOTDIR:-$HOME}/.zshrc" >/dev/null 2>&1 || true - eval ${JSON.stringify(input.command)} - `, - ], - }, - bash: { - args: [ - "-c", - "-l", - ` - shopt -s expand_aliases - [[ -f ~/.bashrc ]] && source ~/.bashrc >/dev/null 2>&1 || true - eval ${JSON.stringify(input.command)} - `, - ], - }, - // Windows cmd - cmd: { - args: ["/c", input.command], - }, - // Windows PowerShell - powershell: { - args: ["-NoProfile", "-Command", input.command], - }, - pwsh: { - args: ["-NoProfile", "-Command", input.command], - }, - // Fallback: any shell that doesn't match those above - // - No -l, for max compatibility - "": { - args: ["-c", `${input.command}`], - }, - } - - const matchingInvocation = invocations[shellName] ?? invocations[""] - const args = matchingInvocation?.args - - const cwd = Instance.directory - const shellEnv = await Plugin.trigger("shell.env", { cwd }, { env: {} }) - const proc = spawn(shell, args, { - cwd, - detached: process.platform !== "win32", - stdio: ["ignore", "pipe", "pipe"], - env: { - ...process.env, - ...shellEnv.env, - TERM: "dumb", - }, - }) - let output = "" - - proc.stdout?.on("data", (chunk) => { - output += chunk.toString() - if (part.state.status === "running") { - part.state.metadata = { - output: output, - description: "", - } - Session.updatePart(part) - } - }) - - proc.stderr?.on("data", (chunk) => { - output += chunk.toString() - if (part.state.status === "running") { - part.state.metadata = { - output: output, - description: "", + let currentOutput = "" + + const result = await Shell.execute({ + command: input.command, + cwd: Instance.directory, + shell: Shell.preferred(), + loadRcFiles: true, + abort, + onOutput: (output) => { + currentOutput = output + if (part.state.status === "running") { + part.state.metadata = { + output, + description: "", + } + Session.updatePart(part) } - Session.updatePart(part) - } - }) - - let aborted = false - let exited = false - - const kill = () => Shell.killTree(proc, { exited: () => exited }) - - if (abort.aborted) { - aborted = true - await kill() - } - - const abortHandler = () => { - aborted = true - void kill() - } - - abort.addEventListener("abort", abortHandler, { once: true }) - - await new Promise((resolve) => { - proc.on("close", () => { - exited = true - abort.removeEventListener("abort", abortHandler) - resolve() - }) + }, }) - if (aborted) { + let output = currentOutput + if (result.aborted) { output += "\n\n" + ["", "User aborted the command", ""].join("\n") } msg.time.completed = Date.now() diff --git a/packages/opencode/src/shell/shell.ts b/packages/opencode/src/shell/shell.ts index 2e8d48bfd921..c15c1548e03c 100644 --- a/packages/opencode/src/shell/shell.ts +++ b/packages/opencode/src/shell/shell.ts @@ -64,4 +64,132 @@ export namespace Shell { if (s && !BLACKLIST.has(process.platform === "win32" ? path.win32.basename(s) : path.basename(s))) return s return fallback() }) + + function getInvocationArgs(shell: string, command: string): string[] { + const shellName = ( + process.platform === "win32" ? path.win32.basename(shell, ".exe") : path.basename(shell) + ).toLowerCase() + + const invocations: Record = { + nu: ["-c", command], + fish: ["-c", command], + zsh: [ + "-c", + "-l", + `[[ -f ~/.zshenv ]] && source ~/.zshenv >/dev/null 2>&1 || true +[[ -f "\${ZDOTDIR:-$HOME}/.zshrc" ]] && source "\${ZDOTDIR:-$HOME}/.zshrc" >/dev/null 2>&1 || true +eval ${JSON.stringify(command)}`, + ], + bash: [ + "-c", + "-l", + `shopt -s expand_aliases +[[ -f ~/.bashrc ]] && source ~/.bashrc >/dev/null 2>&1 || true +eval ${JSON.stringify(command)}`, + ], + cmd: ["/c", command], + powershell: ["-NoProfile", "-Command", command], + pwsh: ["-NoProfile", "-Command", command], + } + + return invocations[shellName] ?? ["-c", command] + } + + // ============ Unified Execution ============ + + export interface ExecuteOptions { + command: string + cwd: string + shell?: string + loadRcFiles?: boolean + timeout?: number + abort: AbortSignal + env?: Record + onOutput?: (output: string) => void + } + + export interface ExecuteResult { + output: string + exitCode: number | null + timedOut: boolean + aborted: boolean + } + + export async function execute(options: ExecuteOptions): Promise { + const { command, cwd, shell = acceptable(), loadRcFiles = false, timeout, abort, env = {}, onOutput } = options + + const proc = loadRcFiles + ? spawn(shell, getInvocationArgs(shell, command), { + cwd, + env: { ...process.env, TERM: "dumb", ...env }, + stdio: ["ignore", "pipe", "pipe"], + detached: process.platform !== "win32", + }) + : spawn(command, { + shell, + cwd, + env: { ...process.env, TERM: "dumb", ...env }, + stdio: ["ignore", "pipe", "pipe"], + detached: process.platform !== "win32", + }) + + let output = "" + let timedOut = false + let aborted = false + let exited = false + + const append = (chunk: Buffer) => { + output += chunk.toString() + onOutput?.(output) + } + + proc.stdout?.on("data", append) + proc.stderr?.on("data", append) + + const kill = () => killTree(proc, { exited: () => exited }) + + if (abort.aborted) { + aborted = true + await kill() + } + + const abortHandler = () => { + aborted = true + void kill() + } + abort.addEventListener("abort", abortHandler, { once: true }) + + const timeoutTimer = timeout + ? setTimeout(() => { + timedOut = true + void kill() + }, timeout + 100) + : undefined + + await new Promise((resolve, reject) => { + const cleanup = () => { + if (timeoutTimer) clearTimeout(timeoutTimer) + abort.removeEventListener("abort", abortHandler) + } + + proc.once("exit", () => { + exited = true + cleanup() + resolve() + }) + + proc.once("error", (error) => { + exited = true + cleanup() + reject(error) + }) + }) + + return { + output, + exitCode: proc.exitCode, + timedOut, + aborted, + } + } } diff --git a/packages/opencode/src/tool/bash.ts b/packages/opencode/src/tool/bash.ts index 67559b78c085..c9e8aea8f8f0 100644 --- a/packages/opencode/src/tool/bash.ts +++ b/packages/opencode/src/tool/bash.ts @@ -1,5 +1,4 @@ import z from "zod" -import { spawn } from "child_process" import { Tool } from "./tool" import path from "path" import DESCRIPTION from "./bash.txt" @@ -19,6 +18,7 @@ import { Truncate } from "./truncation" import { Plugin } from "@/plugin" const MAX_METADATA_LENGTH = 30_000 +const MAX_OUTPUT_LENGTH = 30_000 const DEFAULT_TIMEOUT = Flag.OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS || 2 * 60 * 1000 export const log = Log.create({ service: "bash-tool" }) @@ -53,8 +53,7 @@ const parser = lazy(async () => { // TODO: we may wanna rename this tool so it works better on other shells export const BashTool = Tool.define("bash", async () => { - const shell = Shell.acceptable() - log.info("bash tool using shell", { shell }) + log.info("bash tool using shell", { shell: Shell.acceptable() }) return { description: DESCRIPTION.replaceAll("${directory}", Instance.directory) @@ -163,20 +162,6 @@ export const BashTool = Tool.define("bash", async () => { }) } - const shellEnv = await Plugin.trigger("shell.env", { cwd }, { env: {} }) - const proc = spawn(params.command, { - shell, - cwd, - env: { - ...process.env, - ...shellEnv.env, - }, - stdio: ["ignore", "pipe", "pipe"], - detached: process.platform !== "win32", - }) - - let output = "" - // Initialize metadata with empty output ctx.metadata({ metadata: { @@ -185,69 +170,40 @@ export const BashTool = Tool.define("bash", async () => { }, }) - const append = (chunk: Buffer) => { - output += chunk.toString() - ctx.metadata({ - metadata: { - // truncate the metadata to avoid GIANT blobs of data (has nothing to do w/ what agent can access) - output: output.length > MAX_METADATA_LENGTH ? output.slice(0, MAX_METADATA_LENGTH) + "\n\n..." : output, - description: params.description, - }, - }) - } - - proc.stdout?.on("data", append) - proc.stderr?.on("data", append) - - let timedOut = false - let aborted = false - let exited = false - - const kill = () => Shell.killTree(proc, { exited: () => exited }) - - if (ctx.abort.aborted) { - aborted = true - await kill() - } - - const abortHandler = () => { - aborted = true - void kill() - } - - ctx.abort.addEventListener("abort", abortHandler, { once: true }) - - const timeoutTimer = setTimeout(() => { - timedOut = true - void kill() - }, timeout + 100) - - await new Promise((resolve, reject) => { - const cleanup = () => { - clearTimeout(timeoutTimer) - ctx.abort.removeEventListener("abort", abortHandler) - } - - proc.once("exit", () => { - exited = true - cleanup() - resolve() - }) + let currentOutput = "" - proc.once("error", (error) => { - exited = true - cleanup() - reject(error) - }) + const result = await Shell.execute({ + command: params.command, + cwd, + loadRcFiles: true, + timeout, + abort: ctx.abort, + onOutput: (output) => { + currentOutput = output + if (output.length <= MAX_OUTPUT_LENGTH) { + ctx.metadata({ + metadata: { + output, + description: params.description, + }, + }) + } + }, }) + let output = currentOutput const resultMetadata: string[] = [] - if (timedOut) { + if (output.length > MAX_OUTPUT_LENGTH) { + output = output.slice(0, MAX_OUTPUT_LENGTH) + resultMetadata.push(`bash tool truncated output as it exceeded ${MAX_OUTPUT_LENGTH} char limit`) + } + + if (result.timedOut) { resultMetadata.push(`bash tool terminated command after exceeding timeout ${timeout} ms`) } - if (aborted) { + if (result.aborted) { resultMetadata.push("User aborted the command") } @@ -259,7 +215,7 @@ export const BashTool = Tool.define("bash", async () => { title: params.description, metadata: { output: output.length > MAX_METADATA_LENGTH ? output.slice(0, MAX_METADATA_LENGTH) + "\n\n..." : output, - exit: proc.exitCode, + exit: result.exitCode, description: params.description, }, output, diff --git a/packages/opencode/src/tool/registry.ts b/packages/opencode/src/tool/registry.ts index 9a06cb59937b..82c5bff00799 100644 --- a/packages/opencode/src/tool/registry.ts +++ b/packages/opencode/src/tool/registry.ts @@ -68,13 +68,21 @@ export namespace ToolRegistry { ...ctx, directory: Instance.directory, worktree: Instance.worktree, + model: ctx.model, } as unknown as PluginToolContext const result = await def.execute(args as any, pluginCtx) - const out = await Truncate.output(result, {}, initCtx?.agent) + const normalized = + typeof result === "string" ? { title: "", metadata: {}, output: result } : result + const out = await Truncate.output(normalized.output, {}, initCtx?.agent) return { - title: "", - output: out.truncated ? out.content : result, - metadata: { truncated: out.truncated, outputPath: out.truncated ? out.outputPath : undefined }, + title: normalized.title, + output: out.truncated ? out.content : normalized.output, + metadata: { + ...normalized.metadata, + truncated: out.truncated, + outputPath: out.truncated ? out.outputPath : undefined, + }, + attachments: normalized.attachments, } }, }), diff --git a/packages/opencode/src/tool/task.ts b/packages/opencode/src/tool/task.ts index 8c8cf827abaf..93425d9bf7a1 100644 --- a/packages/opencode/src/tool/task.ts +++ b/packages/opencode/src/tool/task.ts @@ -10,6 +10,7 @@ import { iife } from "@/util/iife" import { defer } from "@/util/defer" import { Config } from "../config/config" import { PermissionNext } from "@/permission/next" +import { Provider } from "../provider/provider" const parameters = z.object({ description: z.string().describe("A short (3-5 words) description of the task"), @@ -103,10 +104,18 @@ export const TaskTool = Tool.define("task", async (ctx) => { const msg = await MessageV2.get({ sessionID: ctx.sessionID, messageID: ctx.messageID }) if (msg.info.role !== "assistant") throw new Error("Not an assistant message") - const model = agent.model ?? { + const messageModel = { modelID: msg.info.modelID, providerID: msg.info.providerID, } + const useMessageModel = msg.info.agent === agent.name + const defaultModel = await Provider.defaultModel() + const model = useMessageModel + ? messageModel + : (agent.model ?? { + modelID: defaultModel.modelID, + providerID: defaultModel.providerID, + }) ctx.metadata({ title: params.description, diff --git a/packages/opencode/src/tool/tool.ts b/packages/opencode/src/tool/tool.ts index 3d17ea192d32..e21f9947d91d 100644 --- a/packages/opencode/src/tool/tool.ts +++ b/packages/opencode/src/tool/tool.ts @@ -17,6 +17,7 @@ export namespace Tool { sessionID: string messageID: string agent: string + model: { providerID: string; modelID: string } abort: AbortSignal callID?: string extra?: { [key: string]: any } diff --git a/packages/opencode/test/tool/apply_patch.test.ts b/packages/opencode/test/tool/apply_patch.test.ts index a08e235885af..42c3cfae8bf2 100644 --- a/packages/opencode/test/tool/apply_patch.test.ts +++ b/packages/opencode/test/tool/apply_patch.test.ts @@ -4,12 +4,14 @@ import * as fs from "fs/promises" import { ApplyPatchTool } from "../../src/tool/apply_patch" import { Instance } from "../../src/project/instance" import { tmpdir } from "../fixture/fixture" +import { testModel } from "./fixtures/model" const baseCtx = { sessionID: "test", messageID: "", callID: "", agent: "build", + model: testModel, abort: AbortSignal.any([]), messages: [], metadata: () => {}, diff --git a/packages/opencode/test/tool/bash.test.ts b/packages/opencode/test/tool/bash.test.ts index fd03b7f9803c..c5e0921860b1 100644 --- a/packages/opencode/test/tool/bash.test.ts +++ b/packages/opencode/test/tool/bash.test.ts @@ -5,12 +5,14 @@ import { Instance } from "../../src/project/instance" import { tmpdir } from "../fixture/fixture" import type { PermissionNext } from "../../src/permission/next" import { Truncate } from "../../src/tool/truncation" +import { testModel } from "./fixtures/model" const ctx = { sessionID: "test", messageID: "", callID: "", agent: "build", + model: testModel, abort: AbortSignal.any([]), messages: [], metadata: () => {}, diff --git a/packages/opencode/test/tool/external-directory.test.ts b/packages/opencode/test/tool/external-directory.test.ts index 33c5e2c7397f..331a65845728 100644 --- a/packages/opencode/test/tool/external-directory.test.ts +++ b/packages/opencode/test/tool/external-directory.test.ts @@ -4,12 +4,14 @@ import type { Tool } from "../../src/tool/tool" import { Instance } from "../../src/project/instance" import { assertExternalDirectory } from "../../src/tool/external-directory" import type { PermissionNext } from "../../src/permission/next" +import { testModel } from "./fixtures/model" const baseCtx: Omit = { sessionID: "test", messageID: "", callID: "", agent: "build", + model: testModel, abort: AbortSignal.any([]), messages: [], metadata: () => {}, diff --git a/packages/opencode/test/tool/fixtures/model.ts b/packages/opencode/test/tool/fixtures/model.ts new file mode 100644 index 000000000000..c74a45c27c62 --- /dev/null +++ b/packages/opencode/test/tool/fixtures/model.ts @@ -0,0 +1,4 @@ +export const testModel = { + providerID: "test-provider", + modelID: "test-model", +} diff --git a/packages/opencode/test/tool/grep.test.ts b/packages/opencode/test/tool/grep.test.ts index e774580df61c..fb8be41d88c9 100644 --- a/packages/opencode/test/tool/grep.test.ts +++ b/packages/opencode/test/tool/grep.test.ts @@ -3,12 +3,14 @@ import path from "path" import { GrepTool } from "../../src/tool/grep" import { Instance } from "../../src/project/instance" import { tmpdir } from "../fixture/fixture" +import { testModel } from "./fixtures/model" const ctx = { sessionID: "test", messageID: "", callID: "", agent: "build", + model: testModel, abort: AbortSignal.any([]), messages: [], metadata: () => {}, diff --git a/packages/opencode/test/tool/question.test.ts b/packages/opencode/test/tool/question.test.ts index 4a436186db61..951877153957 100644 --- a/packages/opencode/test/tool/question.test.ts +++ b/packages/opencode/test/tool/question.test.ts @@ -2,12 +2,14 @@ import { describe, expect, test, spyOn, beforeEach, afterEach } from "bun:test" import { z } from "zod" import { QuestionTool } from "../../src/tool/question" import * as QuestionModule from "../../src/question" +import { testModel } from "./fixtures/model" const ctx = { sessionID: "test-session", messageID: "test-message", callID: "test-call", agent: "test-agent", + model: testModel, abort: AbortSignal.any([]), messages: [], metadata: () => {}, diff --git a/packages/opencode/test/tool/read.test.ts b/packages/opencode/test/tool/read.test.ts index 095c7bce2d25..7e1affa56ea6 100644 --- a/packages/opencode/test/tool/read.test.ts +++ b/packages/opencode/test/tool/read.test.ts @@ -5,6 +5,7 @@ import { Instance } from "../../src/project/instance" import { tmpdir } from "../fixture/fixture" import { PermissionNext } from "../../src/permission/next" import { Agent } from "../../src/agent/agent" +import { testModel } from "./fixtures/model" const FIXTURES_DIR = path.join(import.meta.dir, "fixtures") @@ -13,6 +14,7 @@ const ctx = { messageID: "", callID: "", agent: "build", + model: testModel, abort: AbortSignal.any([]), messages: [], metadata: () => {}, diff --git a/packages/plugin/src/index.ts b/packages/plugin/src/index.ts index bd4ba530498d..0e732aaf162d 100644 --- a/packages/plugin/src/index.ts +++ b/packages/plugin/src/index.ts @@ -182,12 +182,12 @@ export interface Hooks { output: { parts: Part[] }, ) => Promise "tool.execute.before"?: ( - input: { tool: string; sessionID: string; callID: string }, + input: { tool: string; sessionID: string; callID: string; agent?: string }, output: { args: any }, ) => Promise "shell.env"?: (input: { cwd: string }, output: { env: Record }) => Promise "tool.execute.after"?: ( - input: { tool: string; sessionID: string; callID: string; args: any }, + input: { tool: string; sessionID: string; callID: string; args: any; agent?: string }, output: { title: string output: string diff --git a/packages/plugin/src/tool.ts b/packages/plugin/src/tool.ts index 23aa512d9a43..28714535b092 100644 --- a/packages/plugin/src/tool.ts +++ b/packages/plugin/src/tool.ts @@ -4,6 +4,7 @@ export type ToolContext = { sessionID: string messageID: string agent: string + model?: { providerID: string; modelID: string } /** * Current project directory for this session. * Prefer this over process.cwd() when resolving relative paths. From 78bd4e334a1eccc7a33a3662bafcc404175dac47 Mon Sep 17 00:00:00 2001 From: Saatvik Arya Date: Thu, 5 Feb 2026 12:42:26 +0530 Subject: [PATCH 02/22] feat(plugin)!: migrate plugin system to SDK v2 Co-authored-by: Cursor --- packages/opencode/src/plugin/codex.ts | 8 +++++--- packages/opencode/src/plugin/copilot.ts | 14 +++++++------- packages/opencode/src/plugin/index.ts | 24 ++++++++++++++---------- packages/plugin/src/index.ts | 13 ++++++++----- 4 files changed, 34 insertions(+), 25 deletions(-) diff --git a/packages/opencode/src/plugin/codex.ts b/packages/opencode/src/plugin/codex.ts index 56931b2ed62c..15f260da8f0f 100644 --- a/packages/opencode/src/plugin/codex.ts +++ b/packages/opencode/src/plugin/codex.ts @@ -440,8 +440,8 @@ export async function CodexAuthPlugin(input: PluginInput): Promise { const tokens = await refreshAccessToken(currentAuth.refresh) const newAccountId = extractAccountId(tokens) || authWithAccount.accountId await input.client.auth.set({ - path: { id: "openai" }, - body: { + providerID: "openai", + auth: { type: "oauth", refresh: tokens.refresh_token, access: tokens.access_token, @@ -457,7 +457,9 @@ export async function CodexAuthPlugin(input: PluginInput): Promise { const headers = new Headers() if (init?.headers) { if (init.headers instanceof Headers) { - init.headers.forEach((value, key) => headers.set(key, value)) + init.headers.forEach((value, key) => { + headers.set(key, value) + }) } else if (Array.isArray(init.headers)) { for (const [key, value] of init.headers) { if (value !== undefined) headers.set(key, String(value)) diff --git a/packages/opencode/src/plugin/copilot.ts b/packages/opencode/src/plugin/copilot.ts index 39ea0d00d28e..cb2b91bf0462 100644 --- a/packages/opencode/src/plugin/copilot.ts +++ b/packages/opencode/src/plugin/copilot.ts @@ -309,15 +309,15 @@ export async function CopilotAuthPlugin(input: PluginInput): Promise { } const session = await sdk.session - .get({ - path: { - id: incoming.sessionID, - }, - query: { + .get( + { + sessionID: incoming.sessionID, directory: input.directory, }, - throwOnError: true, - }) + { + throwOnError: true, + }, + ) .catch(() => undefined) if (!session || !session.data.parentID) return // mark subagent sessions as agent initiated matching standard that other copilot tools have diff --git a/packages/opencode/src/plugin/index.ts b/packages/opencode/src/plugin/index.ts index 24dc695d6350..83deab1bb816 100644 --- a/packages/opencode/src/plugin/index.ts +++ b/packages/opencode/src/plugin/index.ts @@ -1,8 +1,9 @@ -import type { Hooks, PluginInput, Plugin as PluginInstance } from "@opencode-ai/plugin" +import type { PluginInput, Hooks } from "@opencode-ai/plugin" +import type { Plugin as PluginFn } from "@opencode-ai/plugin" import { Config } from "../config/config" import { Bus } from "../bus" import { Log } from "../util/log" -import { createOpencodeClient } from "@opencode-ai/sdk" +import { createOpencodeClient } from "@opencode-ai/sdk/v2" import { Server } from "../server/server" import { BunProc } from "../bun" import { Instance } from "../project/instance" @@ -11,7 +12,6 @@ import { CodexAuthPlugin } from "./codex" import { Session } from "../session" import { NamedError } from "@opencode-ai/util/error" import { CopilotAuthPlugin } from "./copilot" -import { gitlabAuthPlugin as GitlabAuthPlugin } from "@gitlab/opencode-gitlab-auth" export namespace Plugin { const log = Log.create({ service: "plugin" }) @@ -19,7 +19,7 @@ export namespace Plugin { const BUILTIN = ["opencode-anthropic-auth@0.0.13"] // Built-in plugins that are directly imported (not installed from npm) - const INTERNAL_PLUGINS: PluginInstance[] = [CodexAuthPlugin, CopilotAuthPlugin, GitlabAuthPlugin] + const INTERNAL_PLUGINS: PluginFn[] = [CodexAuthPlugin, CopilotAuthPlugin] const state = Instance.state(async () => { const client = createOpencodeClient({ @@ -28,8 +28,10 @@ export namespace Plugin { // @ts-ignore - fetch type incompatibility fetch: async (...args) => Server.App().fetch(...args), }) + const config = await Config.get() const hooks: Hooks[] = [] + const input: PluginInput = { client, project: Instance.project, @@ -80,14 +82,17 @@ export namespace Plugin { if (!plugin) continue } const mod = await import(plugin) + // Prevent duplicate initialization when plugins export the same function // as both a named export and default export (e.g., `export const X` and `export default X`). // Object.entries(mod) would return both entries pointing to the same function reference. - const seen = new Set() - for (const [_name, fn] of Object.entries(mod)) { - if (seen.has(fn)) continue - seen.add(fn) - const init = await fn(input) + const seen = new Set() + for (const [_name, fn] of Object.entries(mod)) { + if (typeof fn !== "function") continue + const pluginFn = fn as PluginFn + if (seen.has(pluginFn)) continue + seen.add(pluginFn) + const init = await pluginFn(input) hooks.push(init) } } @@ -123,7 +128,6 @@ export namespace Plugin { const hooks = await state().then((x) => x.hooks) const config = await Config.get() for (const hook of hooks) { - // @ts-expect-error this is because we haven't moved plugin to sdk v2 await hook.config?.(config) } Bus.subscribeAll(async (input) => { diff --git a/packages/plugin/src/index.ts b/packages/plugin/src/index.ts index 0e732aaf162d..00f2e75e25e5 100644 --- a/packages/plugin/src/index.ts +++ b/packages/plugin/src/index.ts @@ -1,16 +1,16 @@ import type { Event, - createOpencodeClient, Project, Model, Provider, - Permission, + PermissionRequest, UserMessage, Message, Part, Auth, Config, -} from "@opencode-ai/sdk" + OpencodeClient, +} from "@opencode-ai/sdk/v2" import type { BunShell } from "./shell" import { type ToolDefinition } from "./tool" @@ -24,7 +24,7 @@ export type ProviderContext = { } export type PluginInput = { - client: ReturnType + client: OpencodeClient project: Project directory: string worktree: string @@ -176,7 +176,10 @@ export interface Hooks { input: { sessionID: string; agent: string; model: Model; provider: ProviderContext; message: UserMessage }, output: { headers: Record }, ) => Promise - "permission.ask"?: (input: Permission, output: { status: "ask" | "deny" | "allow" }) => Promise + "permission.ask"?: ( + input: PermissionRequest, + output: { status: "ask" | "deny" | "allow" | "reject" }, + ) => Promise "command.execute.before"?: ( input: { command: string; sessionID: string; arguments: string }, output: { parts: Part[] }, From 1f5bd0d6fffd7d4eb08f647bf32858abc0f1b404 Mon Sep 17 00:00:00 2001 From: Saatvik Arya Date: Thu, 5 Feb 2026 12:43:14 +0530 Subject: [PATCH 03/22] feat(agent): add configurable reminder field Co-authored-by: Cursor --- packages/opencode/src/agent/agent.ts | 4 ++++ packages/opencode/src/config/config.ts | 7 +++++++ packages/opencode/src/session/prompt.ts | 4 ++-- packages/sdk/js/src/v2/gen/types.gen.ts | 8 +++++++- 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/packages/opencode/src/agent/agent.ts b/packages/opencode/src/agent/agent.ts index e338559be7e4..97ce7ad9cc7f 100644 --- a/packages/opencode/src/agent/agent.ts +++ b/packages/opencode/src/agent/agent.ts @@ -13,6 +13,7 @@ import PROMPT_COMPACTION from "./prompt/compaction.txt" import PROMPT_EXPLORE from "./prompt/explore.txt" import PROMPT_SUMMARY from "./prompt/summary.txt" import PROMPT_TITLE from "./prompt/title.txt" +import PROMPT_PLAN from "../session/prompt/plan.txt" import { PermissionNext } from "@/permission/next" import { mergeDeep, pipe, sortBy, values } from "remeda" import { Global } from "@/global" @@ -42,6 +43,7 @@ export namespace Agent { prompt: z.string().optional(), options: z.record(z.string(), z.any()), steps: z.number().int().positive().optional(), + reminder: z.union([z.string(), z.literal(false)]).optional(), }) .meta({ ref: "Agent", @@ -93,6 +95,7 @@ export namespace Agent { name: "plan", description: "Plan mode. Disallows all edit tools.", options: {}, + reminder: PROMPT_PLAN, permission: PermissionNext.merge( defaults, PermissionNext.fromConfig({ @@ -228,6 +231,7 @@ export namespace Agent { item.steps = value.steps ?? item.steps item.options = mergeDeep(item.options, value.options ?? {}) item.permission = PermissionNext.merge(item.permission, PermissionNext.fromConfig(value.permission ?? {})) + item.reminder = value.reminder ?? item.reminder } // Ensure Truncate.GLOB is allowed unless explicitly configured diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts index 8f0f583ea3d6..4604a6f94619 100644 --- a/packages/opencode/src/config/config.ts +++ b/packages/opencode/src/config/config.ts @@ -703,6 +703,12 @@ export namespace Config { .describe("Maximum number of agentic iterations before forcing text-only response"), maxSteps: z.number().int().positive().optional().describe("@deprecated Use 'steps' field instead."), permission: Permission.optional(), + reminder: z + .union([z.string(), z.literal(false)]) + .optional() + .describe( + "Custom reminder text injected into user messages for this agent. Set to false to disable the default reminder.", + ), }) .catchall(z.any()) .transform((agent, ctx) => { @@ -723,6 +729,7 @@ export namespace Config { "permission", "disable", "tools", + "reminder", ]) // Extract unknown properties into options diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index 8bf132bb23de..1f749fd49b91 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -17,8 +17,8 @@ import { ProviderTransform } from "../provider/transform" import { SystemPrompt } from "./system" import { InstructionPrompt } from "./instruction" import { Plugin } from "../plugin" -import PROMPT_PLAN from "../session/prompt/plan.txt" import BUILD_SWITCH from "../session/prompt/build-switch.txt" +import PROMPT_PLAN from "../session/prompt/plan.txt" import MAX_STEPS from "../session/prompt/max-steps.txt" import { defer } from "../util/defer" import { clone } from "remeda" @@ -1332,7 +1332,7 @@ export namespace SessionPrompt { const userMessage = input.messages.findLast((msg) => msg.info.role === "user") if (!userMessage) return input.messages - // If agent has a reminder configured (string), inject it + // If reminder is false or undefined, skip injection if (typeof input.agent.reminder === "string") { userMessage.parts.push({ id: Identifier.ascending("part"), diff --git a/packages/sdk/js/src/v2/gen/types.gen.ts b/packages/sdk/js/src/v2/gen/types.gen.ts index b22b7e9af4e1..35b9dea831b8 100644 --- a/packages/sdk/js/src/v2/gen/types.gen.ts +++ b/packages/sdk/js/src/v2/gen/types.gen.ts @@ -1470,6 +1470,10 @@ export type AgentConfig = { */ maxSteps?: number permission?: PermissionConfig + /** + * Custom reminder text injected into user messages for this agent. Set to false to disable the default reminder. + */ + reminder?: string | false [key: string]: | unknown | string @@ -1494,6 +1498,8 @@ export type AgentConfig = { | "info" | number | PermissionConfig + | string + | false | undefined } @@ -2149,7 +2155,6 @@ export type File = { removed: number status: "added" | "deleted" | "modified" } - export type McpStatusConnected = { status: "connected" } @@ -2222,6 +2227,7 @@ export type Agent = { [key: string]: unknown } steps?: number + reminder?: string | false } export type LspStatus = { From f6834769181ccd18d6348edc48ce77167c1eb5e7 Mon Sep 17 00:00:00 2001 From: Saatvik Arya Date: Thu, 5 Feb 2026 12:43:21 +0530 Subject: [PATCH 04/22] feat(tool): add task tool and listing API Co-authored-by: Cursor --- .../src/cli/cmd/tui/routes/session/index.tsx | 31 ++++++------- packages/opencode/src/tool/task.ts | 43 +++++++++++++++++++ 2 files changed, 57 insertions(+), 17 deletions(-) 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 b843bda1c9db..40b5b5f0d8ea 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx @@ -1846,27 +1846,17 @@ function Task(props: ToolProps) { const keybind = useKeybind() const { navigate } = useRoute() const local = useLocal() - const sync = useSync() - - const tools = createMemo(() => { - const sessionID = props.metadata.sessionId - const msgs = sync.data.message[sessionID ?? ""] ?? [] - return msgs.flatMap((msg) => - (sync.data.part[msg.id] ?? []) - .filter((part): part is ToolPart => part.type === "tool") - .map((part) => ({ tool: part.tool, state: part.state })), - ) - }) - - const current = createMemo(() => tools().findLast((x) => x.state.status !== "pending")) + const agentType = createMemo(() => props.input.subagent_type ?? props.metadata.subagent_type ?? "unknown") + const current = createMemo(() => props.metadata.summary?.findLast((x) => x.state.status !== "pending")) const isRunning = createMemo(() => props.part.state.status === "running") + const color = createMemo(() => local.agent.color(agentType())) return ( navigate({ type: "session", sessionID: props.metadata.sessionId! }) @@ -1877,7 +1867,7 @@ function Task(props: ToolProps) { > - {props.input.description} ({tools().length} toolcalls) + {props.input.description ?? props.metadata.description} ({props.metadata.summary?.length ?? 0} toolcalls) {(item) => { @@ -1899,8 +1889,15 @@ function Task(props: ToolProps) { - - {props.input.subagent_type} Task {props.input.description} + + {Locale.titlecase(agentType())} Task " + {props.input.description ?? props.metadata.description}" diff --git a/packages/opencode/src/tool/task.ts b/packages/opencode/src/tool/task.ts index 93425d9bf7a1..96b4aedc1b6d 100644 --- a/packages/opencode/src/tool/task.ts +++ b/packages/opencode/src/tool/task.ts @@ -2,6 +2,7 @@ import { Tool } from "./tool" import DESCRIPTION from "./task.txt" import z from "zod" import { Session } from "../session" +import { Bus } from "../bus" import { MessageV2 } from "../session/message-v2" import { Identifier } from "../id/id" import { Agent } from "../agent/agent" @@ -126,6 +127,31 @@ export const TaskTool = Tool.define("task", async (ctx) => { }) const messageID = Identifier.ascending("message") + const parts: Record = {} + const unsub = Bus.subscribe(MessageV2.Event.PartUpdated, async (evt) => { + if (evt.properties.part.sessionID !== session.id) return + if (evt.properties.part.messageID === messageID) return + if (evt.properties.part.type !== "tool") return + const part = evt.properties.part + parts[part.id] = { + id: part.id, + tool: part.tool, + state: { + status: part.state.status, + title: part.state.status === "completed" ? part.state.title : undefined, + }, + } + ctx.metadata({ + title: params.description, + metadata: { + summary: Object.values(parts).sort((a, b) => a.id.localeCompare(b.id)), + subagent_type: params.subagent_type, + sessionId: session.id, + model, + description: params.description, + }, + }) + }) function cancel() { SessionPrompt.cancel(session.id) @@ -149,8 +175,22 @@ export const TaskTool = Tool.define("task", async (ctx) => { ...Object.fromEntries((config.experimental?.primary_tools ?? []).map((t) => [t, false])), }, parts: promptParts, + }).finally(() => { + unsub() }) + const messages = await Session.messages({ sessionID: session.id }) + const summary = messages + .filter((x) => x.info.role === "assistant") + .flatMap((msg) => msg.parts.filter((x: any) => x.type === "tool") as MessageV2.ToolPart[]) + .map((part) => ({ + id: part.id, + tool: part.tool, + state: { + status: part.state.status, + title: part.state.status === "completed" ? part.state.title : undefined, + }, + })) const text = result.parts.findLast((x) => x.type === "text")?.text ?? "" const output = [ @@ -164,8 +204,11 @@ export const TaskTool = Tool.define("task", async (ctx) => { return { title: params.description, metadata: { + summary, + subagent_type: params.subagent_type, sessionId: session.id, model, + description: params.description, }, output, } From 792b66a772303916410b38a6af20ae9e972d1209 Mon Sep 17 00:00:00 2001 From: Saatvik Arya Date: Thu, 5 Feb 2026 12:50:23 +0530 Subject: [PATCH 05/22] feat(tui): inbox display, todo sync, and model defaults Co-authored-by: Cursor --- package.json | 2 +- packages/opencode/package.json | 1 + .../opencode/src/cli/cmd/tui/context/sync.tsx | 166 +++++++++++++++++- .../src/cli/cmd/tui/routes/session/index.tsx | 29 ++- .../cli/cmd/tui/routes/session/sidebar.tsx | 34 ++++ .../opencode/src/server/routes/session.ts | 39 +++- packages/opencode/src/session/index.ts | 1 + packages/opencode/src/session/prompt.ts | 6 + 8 files changed, 271 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index c396905d458f..ce3056d81e69 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "@playwright/test": "1.51.0", "typescript": "5.8.2", "@typescript/native-preview": "7.0.0-dev.20251207.1", - "zod": "4.1.8", + "zod": "4.3.6", "remeda": "2.26.0", "shiki": "3.20.0", "solid-list": "0.3.0", diff --git a/packages/opencode/package.json b/packages/opencode/package.json index 82d562bb093b..e3325bc2ad01 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -51,6 +51,7 @@ "@actions/core": "1.11.1", "@actions/github": "6.0.1", "@agentclientprotocol/sdk": "0.14.1", + "@agni/agent-sdk": "link:@agni/agent-sdk", "@ai-sdk/amazon-bedrock": "3.0.79", "@ai-sdk/anthropic": "2.0.62", "@ai-sdk/azure": "2.0.91", diff --git a/packages/opencode/src/cli/cmd/tui/context/sync.tsx b/packages/opencode/src/cli/cmd/tui/context/sync.tsx index eb8ed2d9bbad..dd754fcb49ed 100644 --- a/packages/opencode/src/cli/cmd/tui/context/sync.tsx +++ b/packages/opencode/src/cli/cmd/tui/context/sync.tsx @@ -17,10 +17,10 @@ import type { ProviderListResponse, ProviderAuthMethod, VcsInfo, -} from "@opencode-ai/sdk/v2" +} from "@opencoder-ai/sdk/v2" import { createStore, produce, reconcile } from "solid-js/store" import { useSDK } from "@tui/context/sdk" -import { Binary } from "@opencode-ai/util/binary" +import { Binary } from "@opencoder-ai/util/binary" import { createSimpleContext } from "./helper" import type { Snapshot } from "@/snapshot" import { useExit } from "./exit" @@ -28,6 +28,150 @@ import { useArgs } from "./args" import { batch, onMount } from "solid-js" import { Log } from "@/util/log" import type { Path } from "@opencode-ai/sdk" +import { + createAgentClient, + type GetMailInboxResponse, + type GetMailThreadsByThreadIdMessagesResponse, +} from "@agni/agent-sdk" + +type AgniConfig = { + apiKey: string + organizationId: string + projectId: string + baseUrl?: string +} + +type AgniThread = GetMailInboxResponse[number] +type AgniMessage = GetMailThreadsByThreadIdMessagesResponse[number] + +const resolveAgniConfig = (): AgniConfig | null => { + const apiKey = process.env.AGNI_API_KEY + const organizationId = process.env.AGNI_ORGANIZATION_ID ?? process.env.AGNI_ORG_ID + const projectId = process.env.AGNI_PROJECT_ID + const baseUrl = process.env.AGNI_BASE_URL + if (!apiKey || !organizationId || !projectId) return null + return { + apiKey, + organizationId, + projectId, + baseUrl, + } +} + +const agniConfig = resolveAgniConfig() +const agniClient = agniConfig + ? createAgentClient({ + apiKey: agniConfig.apiKey, + organizationId: agniConfig.organizationId, + baseUrl: agniConfig.baseUrl, + }) + : null + +const agniRunBySession = new Map() + +const resolveAgentHandle = (messages: { info: Message }[], fallback?: string) => { + for (let i = messages.length - 1; i >= 0; i -= 1) { + const message = messages[i]?.info + if (message?.role === "user" && message.agent) { + return message.agent + } + } + return fallback ?? "build" +} + +const ensureAgniRun = async (sessionID: string, agentHandle: string) => { + if (!agniClient || !agniConfig) return null + if (!agentHandle) return null + const cached = agniRunBySession.get(sessionID) + if (cached) return cached + try { + const run = await agniClient.agentRuns.ensure({ + projectId: agniConfig.projectId, + harness: "opencode", + harnessSessionId: sessionID, + agentHandle, + status: "running", + }) + if (!run?.runId) { + Log.Default.warn("invalid agni run response", { + sessionID, + agentHandle, + run, + }) + return null + } + agniRunBySession.set(sessionID, run.runId) + return run.runId + } catch (error) { + Log.Default.warn("failed to ensure agni run", { + error, + sessionID, + agentHandle, + }) + } + return null +} + +const fetchAgniInbox = async (sessionID: string, agentHandle: string) => { + if (!agniClient || !agniConfig) return [] + const runId = await ensureAgniRun(sessionID, agentHandle) + if (!runId) return [] + try { + const threads = + (await agniClient.mail.inbox.list({ + projectId: agniConfig.projectId, + runId, + limit: 20, + })) ?? [] + + if (threads.length === 0) return [] + + const latestMessages = await Promise.all( + threads.map(async (thread) => { + try { + const messages = + (await agniClient.mail.messages.list({ + threadId: thread.id, + limit: 1, + })) ?? [] + return { + thread, + message: messages[0] ?? null, + } + } catch (error) { + Log.Default.warn("failed to load agni thread messages", { + error, + threadId: thread.id, + }) + return { thread, message: null } + } + }), + ) + + return latestMessages.map(({ thread, message }) => { + const createdAt = message?.createdAt ?? thread.updatedAt + const createdAtDate = new Date(createdAt) + const lastReadAt = thread.lastReadAt ? new Date(thread.lastReadAt) : null + const isRead = lastReadAt ? createdAtDate <= lastReadAt : false + return { + id: thread.id, + senderId: + message?.senderRun.agent.handle ?? + thread.createdByRun.agent.handle ?? + "unknown", + subject: message?.subject ?? thread.subject ?? "No subject", + body: message?.body ?? "", + type: "mail", + priority: message?.priority ?? 0, + isRead, + createdAt: createdAtDate, + } + }) + } catch (error) { + Log.Default.warn("failed to load agni inbox", { error }) + return [] + } +} export const { use: useSync, provider: SyncProvider } = createSimpleContext({ name: "Sync", @@ -73,6 +217,18 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({ formatter: FormatterStatus[] vcs: VcsInfo | undefined path: Path + inbox: { + [sessionID: string]: Array<{ + id: string + senderId: string + subject: string + body: string + type: string + priority: number + isRead: boolean + createdAt: Date + }> + } }>({ provider_next: { all: [], @@ -100,6 +256,7 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({ formatter: [], vcs: undefined, path: { state: "", config: "", worktree: "", directory: "" }, + inbox: {}, }) const sdk = useSDK() @@ -444,9 +601,11 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({ const [session, messages, todo, diff] = await Promise.all([ sdk.client.session.get({ sessionID }, { throwOnError: true }), sdk.client.session.messages({ sessionID, limit: 100 }), - sdk.client.session.todo({ sessionID }), + sdk.client.session.todo.list({ sessionID }), sdk.client.session.diff({ sessionID }), ]) + const agentHandle = resolveAgentHandle(messages.data ?? [], store.config.default_agent) + const inbox = await fetchAgniInbox(sessionID, agentHandle) setStore( produce((draft) => { const match = Binary.search(draft.session, sessionID, (s) => s.id) @@ -458,6 +617,7 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({ draft.part[message.info.id] = message.parts } draft.session_diff[sessionID] = diff.data ?? [] + draft.inbox[sessionID] = inbox }), ) fullSyncedSessions.add(sessionID) 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 40b5b5f0d8ea..b47a930981b6 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx @@ -2048,12 +2048,37 @@ function ApplyPatch(props: ToolProps) { } function TodoWrite(props: ToolProps) { + // Try to get todos from metadata, or parse from output if missing + const todos = createMemo(() => { + // Priority 1: Use metadata.todos if available + if (props.metadata.todos && props.metadata.todos.length > 0) { + return props.metadata.todos + } + + // Priority 2: Try to parse todos from output JSON + if (props.output) { + try { + const parsed = JSON.parse(props.output) + if (Array.isArray(parsed) && parsed.length > 0) { + // Validate that it looks like todos (has id, content, status) + if (parsed[0]?.id && parsed[0]?.content && parsed[0]?.status) { + return parsed + } + } + } catch { + // JSON parse failed, continue to fallback + } + } + + return null + }) + return ( - + - + {(todo) => } diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx index 4ffe91558ed7..897cd6a1e0a4 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx @@ -25,6 +25,7 @@ export function Sidebar(props: { sessionID: string; overlay?: boolean }) { diff: true, todo: true, lsp: true, + inbox: true, }) // Sort MCP servers alphabetically for consistent display order @@ -221,6 +222,39 @@ export function Sidebar(props: { sessionID: string; overlay?: boolean }) { + 0}> + + (sync.data.inbox[props.sessionID]?.length ?? 0) > 2 && setExpanded("inbox", !expanded.inbox)} + > + 2}> + {expanded.inbox ? "▼" : "▶"} + + + Inbox + !m.isRead).length ?? 0) > 0}> + {(sync.data.inbox[props.sessionID]?.filter((m) => !m.isRead).length ?? 0)} new + + + + + + {(message) => ( + + + {message.senderId}: {message.subject} + + + {message.body.slice(0, 80)}{message.body.length > 80 ? "..." : ""} + + + )} + + + + 0}> describeRoute({ summary: "Get session todos", description: "Retrieve the todo list associated with a specific session, showing tasks and action items.", - operationId: "session.todo", + operationId: "session.todo.list", responses: { 200: { description: "Todo list", @@ -182,6 +182,43 @@ export const SessionRoutes = lazy(() => return c.json(todos) }, ) + .put( + "/:sessionID/todo", + describeRoute({ + summary: "Update session todos", + description: "Replace the todo list associated with a specific session.", + operationId: "session.todo.update", + responses: { + 200: { + description: "Updated todo list", + content: { + "application/json": { + schema: resolver(Todo.Info.array()), + }, + }, + }, + ...errors(400, 404), + }, + }), + validator( + "param", + z.object({ + sessionID: z.string().meta({ description: "Session ID" }), + }), + ), + validator( + "json", + z.object({ + todos: Todo.Info.array(), + }), + ), + async (c) => { + const sessionID = c.req.valid("param").sessionID + const { todos } = c.req.valid("json") + await Todo.update({ sessionID, todos }) + return c.json(todos) + }, + ) .post( "/", describeRoute({ diff --git a/packages/opencode/src/session/index.ts b/packages/opencode/src/session/index.ts index b0ffaaf70d77..9a15dfae7cc4 100644 --- a/packages/opencode/src/session/index.ts +++ b/packages/opencode/src/session/index.ts @@ -431,6 +431,7 @@ export namespace Session { const part = "delta" in input ? input.part : input const delta = "delta" in input ? input.delta : undefined await Storage.write(["part", part.messageID, part.id], part) + Bus.publish(MessageV2.Event.PartUpdated, { part, delta, diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index 1f749fd49b91..9e340e3a5d80 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -410,6 +410,7 @@ export namespace SessionPrompt { tool: "task", sessionID, callID: part.id, + agent: task.agent, }, { args: taskArgs }, ) @@ -454,6 +455,7 @@ export namespace SessionPrompt { sessionID, callID: part.id, args: taskArgs, + agent: task.agent, }, result, ) @@ -794,6 +796,7 @@ export namespace SessionPrompt { tool: item.id, sessionID: ctx.sessionID, callID: ctx.callID, + agent: input.agent.name, }, { args, @@ -807,6 +810,7 @@ export namespace SessionPrompt { sessionID: ctx.sessionID, callID: ctx.callID, args, + agent: input.agent.name, }, result, ) @@ -831,6 +835,7 @@ export namespace SessionPrompt { tool: key, sessionID: ctx.sessionID, callID: opts.toolCallId, + agent: input.agent.name, }, { args, @@ -853,6 +858,7 @@ export namespace SessionPrompt { sessionID: ctx.sessionID, callID: opts.toolCallId, args, + agent: input.agent.name, }, result, ) From cc77ad53923dec362344f677eb4996565ace0349 Mon Sep 17 00:00:00 2001 From: Saatvik Arya Date: Thu, 5 Feb 2026 15:30:56 +0530 Subject: [PATCH 06/22] refactor(sdk): split session todo endpoint --- packages/app/src/context/sync.tsx | 2 +- .../src/cli/cmd/tui/routes/session/index.tsx | 8 +- .../cli/cmd/tui/routes/session/sidebar.tsx | 12 +- packages/sdk/js/src/v2/gen/sdk.gen.ts | 111 +++-- packages/sdk/js/src/v2/gen/types.gen.ts | 48 ++- packages/sdk/openapi.json | 406 ++++++++++++++---- 6 files changed, 446 insertions(+), 141 deletions(-) diff --git a/packages/app/src/context/sync.tsx b/packages/app/src/context/sync.tsx index e5916598b52d..5dfa62d700e1 100644 --- a/packages/app/src/context/sync.tsx +++ b/packages/app/src/context/sync.tsx @@ -293,7 +293,7 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({ const key = keyFor(directory, sessionID) return runInflight(inflightTodo, key, () => - retry(() => client.session.todo({ sessionID })).then((todo) => { + retry(() => client.session.todo.list({ sessionID })).then((todo) => { setStore("todo", sessionID, reconcile(todo.data ?? [], { key: "id" })) }), ) 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 b47a930981b6..c82eb6de6eb8 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx @@ -2054,7 +2054,7 @@ function TodoWrite(props: ToolProps) { if (props.metadata.todos && props.metadata.todos.length > 0) { return props.metadata.todos } - + // Priority 2: Try to parse todos from output JSON if (props.output) { try { @@ -2069,7 +2069,7 @@ function TodoWrite(props: ToolProps) { // JSON parse failed, continue to fallback } } - + return null }) @@ -2078,9 +2078,7 @@ function TodoWrite(props: ToolProps) { - - {(todo) => } - + {(todo) => } diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx index 897cd6a1e0a4..7c435d152f91 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx @@ -227,7 +227,9 @@ export function Sidebar(props: { sessionID: string; overlay?: boolean }) { (sync.data.inbox[props.sessionID]?.length ?? 0) > 2 && setExpanded("inbox", !expanded.inbox)} + onMouseDown={() => + (sync.data.inbox[props.sessionID]?.length ?? 0) > 2 && setExpanded("inbox", !expanded.inbox) + } > 2}> {expanded.inbox ? "▼" : "▶"} @@ -235,7 +237,10 @@ export function Sidebar(props: { sessionID: string; overlay?: boolean }) { Inbox !m.isRead).length ?? 0) > 0}> - {(sync.data.inbox[props.sessionID]?.filter((m) => !m.isRead).length ?? 0)} new + + {" "} + {sync.data.inbox[props.sessionID]?.filter((m) => !m.isRead).length ?? 0} new + @@ -247,7 +252,8 @@ export function Sidebar(props: { sessionID: string; overlay?: boolean }) { {message.senderId}: {message.subject} - {message.body.slice(0, 80)}{message.body.length > 80 ? "..." : ""} + {message.body.slice(0, 80)} + {message.body.length > 80 ? "..." : ""} )} diff --git a/packages/sdk/js/src/v2/gen/sdk.gen.ts b/packages/sdk/js/src/v2/gen/sdk.gen.ts index af79c44a17a7..b745eaa7472d 100644 --- a/packages/sdk/js/src/v2/gen/sdk.gen.ts +++ b/packages/sdk/js/src/v2/gen/sdk.gen.ts @@ -132,8 +132,10 @@ import type { SessionStatusResponses, SessionSummarizeErrors, SessionSummarizeResponses, - SessionTodoErrors, - SessionTodoResponses, + SessionTodoListErrors, + SessionTodoListResponses, + SessionTodoUpdateErrors, + SessionTodoUpdateResponses, SessionUnrevertErrors, SessionUnrevertResponses, SessionUnshareErrors, @@ -142,6 +144,7 @@ import type { SessionUpdateResponses, SubtaskPartInput, TextPartInput, + Todo as Todo2, ToolIdsErrors, ToolIdsResponses, ToolListErrors, @@ -926,6 +929,75 @@ export class Experimental extends HeyApiClient { } } +export class Todo extends HeyApiClient { + /** + * Get session todos + * + * Retrieve the todo list associated with a specific session, showing tasks and action items. + */ + public list( + parameters: { + sessionID: string + directory?: string + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "path", key: "sessionID" }, + { in: "query", key: "directory" }, + ], + }, + ], + ) + return (options?.client ?? this.client).get({ + url: "/session/{sessionID}/todo", + ...options, + ...params, + }) + } + + /** + * Update session todos + * + * Replace the todo list associated with a specific session. + */ + public update( + parameters: { + sessionID: string + directory?: string + todos?: Array + }, + options?: Options, + ) { + const params = buildClientParams( + [parameters], + [ + { + args: [ + { in: "path", key: "sessionID" }, + { in: "query", key: "directory" }, + { in: "body", key: "todos" }, + ], + }, + ], + ) + return (options?.client ?? this.client).put({ + url: "/session/{sessionID}/todo", + ...options, + ...params, + headers: { + "Content-Type": "application/json", + ...options?.headers, + ...params.headers, + }, + }) + } +} + export class Session extends HeyApiClient { /** * List sessions @@ -1152,36 +1224,6 @@ export class Session extends HeyApiClient { }) } - /** - * Get session todos - * - * Retrieve the todo list associated with a specific session, showing tasks and action items. - */ - public todo( - parameters: { - sessionID: string - directory?: string - }, - options?: Options, - ) { - const params = buildClientParams( - [parameters], - [ - { - args: [ - { in: "path", key: "sessionID" }, - { in: "query", key: "directory" }, - ], - }, - ], - ) - return (options?.client ?? this.client).get({ - url: "/session/{sessionID}/todo", - ...options, - ...params, - }) - } - /** * Initialize session * @@ -1771,6 +1813,11 @@ export class Session extends HeyApiClient { ...params, }) } + + private _todo?: Todo + get todo(): Todo { + return (this._todo ??= new Todo({ client: this.client })) + } } export class Part extends HeyApiClient { diff --git a/packages/sdk/js/src/v2/gen/types.gen.ts b/packages/sdk/js/src/v2/gen/types.gen.ts index 35b9dea831b8..2ebbc8db55ed 100644 --- a/packages/sdk/js/src/v2/gen/types.gen.ts +++ b/packages/sdk/js/src/v2/gen/types.gen.ts @@ -3124,7 +3124,7 @@ export type SessionChildrenResponses = { export type SessionChildrenResponse = SessionChildrenResponses[keyof SessionChildrenResponses] -export type SessionTodoData = { +export type SessionTodoListData = { body?: never path: { /** @@ -3138,7 +3138,7 @@ export type SessionTodoData = { url: "/session/{sessionID}/todo" } -export type SessionTodoErrors = { +export type SessionTodoListErrors = { /** * Bad request */ @@ -3149,16 +3149,54 @@ export type SessionTodoErrors = { 404: NotFoundError } -export type SessionTodoError = SessionTodoErrors[keyof SessionTodoErrors] +export type SessionTodoListError = SessionTodoListErrors[keyof SessionTodoListErrors] -export type SessionTodoResponses = { +export type SessionTodoListResponses = { /** * Todo list */ 200: Array } -export type SessionTodoResponse = SessionTodoResponses[keyof SessionTodoResponses] +export type SessionTodoListResponse = SessionTodoListResponses[keyof SessionTodoListResponses] + +export type SessionTodoUpdateData = { + body?: { + todos: Array + } + path: { + /** + * Session ID + */ + sessionID: string + } + query?: { + directory?: string + } + url: "/session/{sessionID}/todo" +} + +export type SessionTodoUpdateErrors = { + /** + * Bad request + */ + 400: BadRequestError + /** + * Not found + */ + 404: NotFoundError +} + +export type SessionTodoUpdateError = SessionTodoUpdateErrors[keyof SessionTodoUpdateErrors] + +export type SessionTodoUpdateResponses = { + /** + * Updated todo list + */ + 200: Array +} + +export type SessionTodoUpdateResponse = SessionTodoUpdateResponses[keyof SessionTodoUpdateResponses] export type SessionInitData = { body?: { diff --git a/packages/sdk/openapi.json b/packages/sdk/openapi.json index 70596431bb62..c63904c3f305 100644 --- a/packages/sdk/openapi.json +++ b/packages/sdk/openapi.json @@ -36,7 +36,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.global.health({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.global.health({\n ...\n})" } ] } @@ -61,7 +61,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.global.event({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.global.event({\n ...\n})" } ] } @@ -153,7 +153,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.global.dispose({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.global.dispose({\n ...\n})" } ] } @@ -287,7 +287,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.project.list({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.project.list({\n ...\n})" } ] } @@ -321,7 +321,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.project.current({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.project.current({\n ...\n})" } ] } @@ -420,7 +420,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.project.update({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.project.update({\n ...\n})" } ] } @@ -457,7 +457,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.pty.list({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.pty.list({\n ...\n})" } ] }, @@ -534,7 +534,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.pty.create({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.pty.create({\n ...\n})" } ] } @@ -586,7 +586,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.pty.get({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.pty.get({\n ...\n})" } ] }, @@ -662,7 +662,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.pty.update({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.pty.update({\n ...\n})" } ] }, @@ -712,7 +712,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.pty.remove({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.pty.remove({\n ...\n})" } ] } @@ -764,7 +764,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.pty.connect({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.pty.connect({\n ...\n})" } ] } @@ -798,7 +798,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.config.get({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.config.get({\n ...\n})" } ] }, @@ -849,7 +849,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.config.update({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.config.update({\n ...\n})" } ] } @@ -901,7 +901,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.config.providers({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.config.providers({\n ...\n})" } ] } @@ -945,7 +945,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tool.ids({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tool.ids({\n ...\n})" } ] } @@ -1005,7 +1005,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tool.list({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tool.list({\n ...\n})" } ] } @@ -1058,7 +1058,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.worktree.create({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.worktree.create({\n ...\n})" } ] }, @@ -1093,7 +1093,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.worktree.list({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.worktree.list({\n ...\n})" } ] }, @@ -1144,7 +1144,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.worktree.remove({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.worktree.remove({\n ...\n})" } ] } @@ -1197,7 +1197,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.worktree.reset({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.worktree.reset({\n ...\n})" } ] } @@ -1237,7 +1237,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.experimental.resource.list({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.experimental.resource.list({\n ...\n})" } ] } @@ -1307,7 +1307,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.list({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.list({\n ...\n})" } ] }, @@ -1370,7 +1370,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.create({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.create({\n ...\n})" } ] } @@ -1420,7 +1420,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.status({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.status({\n ...\n})" } ] } @@ -1484,7 +1484,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.get({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.get({\n ...\n})" } ] }, @@ -1545,7 +1545,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.delete({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.delete({\n ...\n})" } ] }, @@ -1627,7 +1627,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.update({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.update({\n ...\n})" } ] } @@ -1694,14 +1694,14 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.children({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.children({\n ...\n})" } ] } }, "/session/{sessionID}/todo": { "get": { - "operationId": "session.todo", + "operationId": "session.todo.list", "parameters": [ { "in": "query", @@ -1760,7 +1760,89 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.todo({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.todo.list({\n ...\n})" + } + ] + }, + "put": { + "operationId": "session.todo.update", + "parameters": [ + { + "in": "query", + "name": "directory", + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "sessionID", + "schema": { + "type": "string" + }, + "required": true, + "description": "Session ID" + } + ], + "summary": "Update session todos", + "description": "Replace the todo list associated with a specific session.", + "responses": { + "200": { + "description": "Updated todo list", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Todo" + } + } + } + } + }, + "400": { + "description": "Bad request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BadRequestError" + } + } + } + }, + "404": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundError" + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "todos": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Todo" + } + } + }, + "required": ["todos"] + } + } + } + }, + "x-codeSamples": [ + { + "lang": "js", + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.todo.update({\n ...\n})" } ] } @@ -1845,7 +1927,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.init({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.init({\n ...\n})" } ] } @@ -1903,7 +1985,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.fork({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.fork({\n ...\n})" } ] } @@ -1965,7 +2047,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.abort({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.abort({\n ...\n})" } ] } @@ -2027,7 +2109,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.share({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.share({\n ...\n})" } ] }, @@ -2088,7 +2170,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.unshare({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.unshare({\n ...\n})" } ] } @@ -2142,7 +2224,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.diff({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.diff({\n ...\n})" } ] } @@ -2227,7 +2309,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.summarize({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.summarize({\n ...\n})" } ] } @@ -2312,7 +2394,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.messages({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.messages({\n ...\n})" } ] }, @@ -2457,7 +2539,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.prompt({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.prompt({\n ...\n})" } ] } @@ -2541,7 +2623,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.message({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.message({\n ...\n})" } ] } @@ -2621,7 +2703,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.part.delete({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.part.delete({\n ...\n})" } ] }, @@ -2708,7 +2790,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.part.update({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.part.update({\n ...\n})" } ] } @@ -2836,7 +2918,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.prompt_async({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.prompt_async({\n ...\n})" } ] } @@ -2974,7 +3056,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.command({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.command({\n ...\n})" } ] } @@ -3067,7 +3149,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.shell({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.shell({\n ...\n})" } ] } @@ -3149,7 +3231,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.revert({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.revert({\n ...\n})" } ] } @@ -3211,7 +3293,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.unrevert({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.session.unrevert({\n ...\n})" } ] } @@ -3298,7 +3380,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.permission.respond({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.permission.respond({\n ...\n})" } ] } @@ -3379,7 +3461,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.permission.reply({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.permission.reply({\n ...\n})" } ] } @@ -3416,7 +3498,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.permission.list({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.permission.list({\n ...\n})" } ] } @@ -3453,7 +3535,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.question.list({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.question.list({\n ...\n})" } ] } @@ -3534,7 +3616,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.question.reply({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.question.reply({\n ...\n})" } ] } @@ -3596,7 +3678,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.question.reject({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.question.reject({\n ...\n})" } ] } @@ -3858,7 +3940,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.provider.list({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.provider.list({\n ...\n})" } ] } @@ -3901,7 +3983,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.provider.auth({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.provider.auth({\n ...\n})" } ] } @@ -3970,7 +4052,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.provider.oauth.authorize({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.provider.oauth.authorize({\n ...\n})" } ] } @@ -4043,7 +4125,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.provider.oauth.callback({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.provider.oauth.callback({\n ...\n})" } ] } @@ -4139,7 +4221,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.find.text({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.find.text({\n ...\n})" } ] } @@ -4209,7 +4291,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.find.files({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.find.files({\n ...\n})" } ] } @@ -4254,7 +4336,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.find.symbols({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.find.symbols({\n ...\n})" } ] } @@ -4299,7 +4381,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.file.list({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.file.list({\n ...\n})" } ] } @@ -4341,7 +4423,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.file.read({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.file.read({\n ...\n})" } ] } @@ -4378,7 +4460,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.file.status({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.file.status({\n ...\n})" } ] } @@ -4418,7 +4500,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.mcp.status({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.mcp.status({\n ...\n})" } ] }, @@ -4491,7 +4573,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.mcp.add({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.mcp.add({\n ...\n})" } ] } @@ -4560,7 +4642,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.mcp.auth.start({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.mcp.auth.start({\n ...\n})" } ] }, @@ -4617,7 +4699,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.mcp.auth.remove({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.mcp.auth.remove({\n ...\n})" } ] } @@ -4695,7 +4777,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.mcp.auth.callback({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.mcp.auth.callback({\n ...\n})" } ] } @@ -4757,7 +4839,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.mcp.auth.authenticate({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.mcp.auth.authenticate({\n ...\n})" } ] } @@ -4798,7 +4880,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.mcp.connect({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.mcp.connect({\n ...\n})" } ] } @@ -4839,7 +4921,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.mcp.disconnect({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.mcp.disconnect({\n ...\n})" } ] } @@ -4898,7 +4980,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.appendPrompt({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.appendPrompt({\n ...\n})" } ] } @@ -4932,7 +5014,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.openHelp({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.openHelp({\n ...\n})" } ] } @@ -4966,7 +5048,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.openSessions({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.openSessions({\n ...\n})" } ] } @@ -5000,7 +5082,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.openThemes({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.openThemes({\n ...\n})" } ] } @@ -5034,7 +5116,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.openModels({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.openModels({\n ...\n})" } ] } @@ -5068,7 +5150,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.submitPrompt({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.submitPrompt({\n ...\n})" } ] } @@ -5102,7 +5184,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.clearPrompt({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.clearPrompt({\n ...\n})" } ] } @@ -5161,7 +5243,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.executeCommand({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.executeCommand({\n ...\n})" } ] } @@ -5222,7 +5304,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.showToast({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.showToast({\n ...\n})" } ] } @@ -5288,7 +5370,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.publish({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.publish({\n ...\n})" } ] } @@ -5359,7 +5441,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.selectSession({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.selectSession({\n ...\n})" } ] } @@ -5400,7 +5482,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.control.next({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.control.next({\n ...\n})" } ] } @@ -5441,7 +5523,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.control.response({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.tui.control.response({\n ...\n})" } ] } @@ -5475,7 +5557,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.instance.dispose({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.instance.dispose({\n ...\n})" } ] } @@ -5509,7 +5591,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.path.get({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.path.get({\n ...\n})" } ] } @@ -5543,7 +5625,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.vcs.get({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.vcs.get({\n ...\n})" } ] } @@ -5580,7 +5662,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.command.list({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.command.list({\n ...\n})" } ] } @@ -5657,7 +5739,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.app.log({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.app.log({\n ...\n})" } ] } @@ -5694,7 +5776,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.app.agents({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.app.agents({\n ...\n})" } ] } @@ -5746,7 +5828,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.app.skills({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.app.skills({\n ...\n})" } ] } @@ -5783,7 +5865,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.lsp.status({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.lsp.status({\n ...\n})" } ] } @@ -5820,7 +5902,118 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.formatter.status({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.formatter.status({\n ...\n})" + } + ] + } + }, + "/auth/{providerID}": { + "put": { + "operationId": "auth.set", + "parameters": [ + { + "in": "query", + "name": "directory", + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "providerID", + "schema": { + "type": "string" + }, + "required": true + } + ], + "summary": "Set auth credentials", + "description": "Set authentication credentials", + "responses": { + "200": { + "description": "Successfully set authentication credentials", + "content": { + "application/json": { + "schema": { + "type": "boolean" + } + } + } + }, + "400": { + "description": "Bad request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BadRequestError" + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Auth" + } + } + } + }, + "x-codeSamples": [ + { + "lang": "js", + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.auth.set({\n ...\n})" + } + ] + }, + "delete": { + "operationId": "auth.remove", + "parameters": [ + { + "in": "query", + "name": "directory", + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "providerID", + "schema": { + "type": "string" + }, + "required": true + } + ], + "summary": "Remove auth credentials", + "description": "Remove authentication credentials", + "responses": { + "200": { + "description": "Successfully removed authentication credentials", + "content": { + "application/json": { + "schema": { + "type": "boolean" + } + } + } + }, + "400": { + "description": "Bad request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BadRequestError" + } + } + } + } + }, + "x-codeSamples": [ + { + "lang": "js", + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.auth.remove({\n ...\n})" } ] } @@ -5854,7 +6047,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.event.subscribe({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.event.subscribe({\n ...\n})" } ] } @@ -9225,6 +9418,18 @@ }, "permission": { "$ref": "#/components/schemas/PermissionConfig" + }, + "reminder": { + "description": "Custom reminder text injected into user messages for this agent. Set to false to disable the default reminder.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "boolean", + "const": false + } + ] } }, "additionalProperties": {} @@ -11022,6 +11227,17 @@ "type": "integer", "exclusiveMinimum": 0, "maximum": 9007199254740991 + }, + "reminder": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "boolean", + "const": false + } + ] } }, "required": ["name", "mode", "permission", "options"] From a08519e986db4f6c964df8fe1f30570b210c625e Mon Sep 17 00:00:00 2001 From: Saatvik Arya Date: Thu, 5 Feb 2026 15:32:18 +0530 Subject: [PATCH 07/22] refactor: rebrand from opencode to opencoder --- .github/workflows/publish.yml | 33 ++- .opencode/tool/github-pr-search.ts | 2 +- .opencode/tool/github-triage.ts | 2 +- CONTRIBUTING.md | 2 +- bun.lock | 194 +++++++++--------- github/bun.lock | 4 +- github/index.ts | 2 +- github/package.json | 2 +- install | 12 +- package.json | 6 +- packages/app/e2e/files/file-viewer.spec.ts | 2 +- packages/app/e2e/projects/workspaces.spec.ts | 2 +- packages/app/e2e/utils.ts | 4 +- packages/app/package.json | 10 +- packages/app/src/app.tsx | 18 +- .../components/dialog-connect-provider.tsx | 24 +-- .../src/components/dialog-custom-provider.tsx | 14 +- .../src/components/dialog-edit-project.tsx | 14 +- packages/app/src/components/dialog-fork.tsx | 12 +- .../src/components/dialog-manage-models.tsx | 12 +- .../src/components/dialog-release-notes.tsx | 6 +- .../components/dialog-select-directory.tsx | 12 +- .../app/src/components/dialog-select-file.tsx | 16 +- .../app/src/components/dialog-select-mcp.tsx | 6 +- .../components/dialog-select-model-unpaid.tsx | 16 +- .../src/components/dialog-select-model.tsx | 14 +- .../src/components/dialog-select-provider.tsx | 12 +- .../src/components/dialog-select-server.tsx | 16 +- .../app/src/components/dialog-settings.tsx | 6 +- packages/app/src/components/prompt-input.tsx | 20 +- .../src/components/session-context-usage.tsx | 6 +- .../src/components/session-lsp-indicator.tsx | 42 ++++ .../src/components/session-mcp-indicator.tsx | 34 +++ .../session/session-context-tab.tsx | 16 +- .../src/components/session/session-header.tsx | 22 +- .../components/session/session-new-view.tsx | 4 +- .../session/session-sortable-tab.tsx | 10 +- .../session/session-sortable-terminal-tab.tsx | 8 +- .../app/src/components/settings-general.tsx | 14 +- .../app/src/components/settings-keybinds.tsx | 10 +- .../app/src/components/settings-models.tsx | 14 +- .../src/components/settings-permissions.tsx | 4 +- .../app/src/components/settings-providers.tsx | 12 +- .../app/src/components/status-popover.tsx | 14 +- packages/app/src/components/terminal.tsx | 4 +- packages/app/src/components/titlebar.tsx | 10 +- packages/app/src/context/command.tsx | 4 +- packages/app/src/context/comments.tsx | 2 +- packages/app/src/context/file.tsx | 6 +- packages/app/src/context/global-sdk.tsx | 4 +- packages/app/src/context/global-sync.tsx | 6 +- packages/app/src/context/highlights.tsx | 4 +- packages/app/src/context/language.tsx | 34 +-- packages/app/src/context/layout.tsx | 4 +- packages/app/src/context/local.tsx | 4 +- packages/app/src/context/models.tsx | 2 +- packages/app/src/context/notification.tsx | 8 +- packages/app/src/context/permission.tsx | 6 +- packages/app/src/context/platform.tsx | 2 +- packages/app/src/context/prompt.tsx | 4 +- packages/app/src/context/sdk.tsx | 4 +- packages/app/src/context/server.tsx | 2 +- packages/app/src/context/settings.tsx | 2 +- packages/app/src/context/sync.tsx | 8 +- packages/app/src/context/terminal.tsx | 2 +- packages/app/src/index.css | 58 +++++- packages/app/src/pages/directory-layout.tsx | 6 +- packages/app/src/pages/error.tsx | 8 +- packages/app/src/pages/home.tsx | 10 +- packages/app/src/pages/layout.tsx | 30 +-- packages/app/src/pages/session.tsx | 30 +-- packages/app/src/utils/base64.ts | 2 +- packages/app/src/utils/persist.ts | 2 +- packages/app/src/utils/prompt.ts | 2 +- packages/app/src/utils/sound.ts | 90 ++++---- packages/console/app/package.json | 12 +- packages/console/app/src/app.tsx | 4 +- .../app/src/component/email-signup.tsx | 2 +- packages/console/app/src/context/auth.ts | 8 +- .../console/app/src/context/auth.withActor.ts | 2 +- .../console/app/src/routes/api/enterprise.ts | 2 +- .../console/app/src/routes/bench/[id].tsx | 4 +- .../console/app/src/routes/bench/index.tsx | 4 +- .../app/src/routes/bench/submission.ts | 6 +- .../app/src/routes/black/subscribe/[plan].tsx | 12 +- .../console/app/src/routes/debug/index.ts | 4 +- .../console/app/src/routes/stripe/webhook.ts | 18 +- .../app/src/routes/workspace-picker.tsx | 10 +- packages/console/app/src/routes/workspace.tsx | 4 +- .../[id]/billing/billing-section.tsx | 2 +- .../workspace/[id]/billing/black-section.tsx | 10 +- .../[id]/billing/monthly-limit-section.tsx | 2 +- .../[id]/billing/payment-section.tsx | 2 +- .../workspace/[id]/billing/reload-section.tsx | 6 +- .../routes/workspace/[id]/graph-section.tsx | 10 +- .../workspace/[id]/keys/key-section.tsx | 4 +- .../workspace/[id]/members/member-section.tsx | 6 +- .../routes/workspace/[id]/model-section.tsx | 4 +- .../workspace/[id]/new-user-section.tsx | 4 +- .../workspace/[id]/provider-section.tsx | 2 +- .../[id]/settings/settings-section.tsx | 6 +- .../routes/workspace/[id]/usage-section.tsx | 2 +- .../app/src/routes/workspace/common.tsx | 12 +- .../app/src/routes/zen/util/dataDumper.ts | 2 +- .../app/src/routes/zen/util/handler.ts | 28 +-- .../console/app/src/routes/zen/util/logger.ts | 2 +- .../src/routes/zen/util/provider/provider.ts | 2 +- .../routes/zen/util/stickyProviderTracker.ts | 2 +- .../app/src/routes/zen/util/trialLimiter.ts | 6 +- .../console/app/src/routes/zen/v1/models.ts | 10 +- packages/console/core/package.json | 8 +- packages/console/core/script/reset-db.ts | 2 +- packages/console/core/src/aws.ts | 2 +- packages/console/core/src/billing.ts | 2 +- packages/console/core/src/black.ts | 2 +- packages/console/core/src/drizzle/index.ts | 2 +- packages/console/core/src/model.ts | 2 +- packages/console/core/src/user.ts | 2 +- packages/console/function/package.json | 8 +- packages/console/function/src/auth.ts | 20 +- .../console/function/src/log-processor.ts | 2 +- packages/console/mail/package.json | 4 +- packages/console/resource/package.json | 2 +- packages/desktop/package.json | 6 +- packages/desktop/scripts/prepare.ts | 2 +- packages/desktop/src/index.tsx | 11 +- packages/desktop/vite.config.ts | 2 +- packages/docs/docs.json | 2 +- packages/enterprise/package.json | 8 +- packages/enterprise/src/app.css | 2 +- packages/enterprise/src/app.tsx | 14 +- packages/enterprise/src/core/share.ts | 10 +- packages/enterprise/src/core/storage.ts | 2 +- .../enterprise/src/routes/share/[shareID].tsx | 42 ++-- packages/enterprise/test/core/share.test.ts | 2 +- packages/function/package.json | 4 +- packages/opencode/AGENTS.md | 2 +- packages/opencode/package.json | 20 +- packages/opencode/script/build.ts | 2 +- packages/opencode/script/publish.ts | 4 +- packages/opencode/src/acp/agent.ts | 2 +- packages/opencode/src/acp/session.ts | 2 +- packages/opencode/src/acp/types.ts | 2 +- packages/opencode/src/bun/index.ts | 2 +- packages/opencode/src/cli/cmd/acp.ts | 2 +- packages/opencode/src/cli/cmd/auth.ts | 2 +- packages/opencode/src/cli/cmd/generate.ts | 2 +- packages/opencode/src/cli/cmd/run.ts | 2 +- .../cli/cmd/tui/component/dialog-command.tsx | 2 +- .../cli/cmd/tui/component/dialog-provider.tsx | 2 +- .../cli/cmd/tui/component/prompt/history.tsx | 2 +- .../cli/cmd/tui/component/prompt/index.tsx | 2 +- .../src/cli/cmd/tui/context/keybind.tsx | 2 +- .../opencode/src/cli/cmd/tui/context/sdk.tsx | 2 +- .../opencode/src/cli/cmd/tui/context/sync.tsx | 2 +- .../session/dialog-fork-from-timeline.tsx | 2 +- .../tui/routes/session/dialog-timeline.tsx | 2 +- .../src/cli/cmd/tui/routes/session/header.tsx | 2 +- .../src/cli/cmd/tui/routes/session/index.tsx | 9 +- .../cli/cmd/tui/routes/session/permission.tsx | 2 +- .../cli/cmd/tui/routes/session/question.tsx | 2 +- .../cli/cmd/tui/routes/session/sidebar.tsx | 2 +- packages/opencode/src/cli/cmd/tui/thread.ts | 2 +- .../src/cli/cmd/tui/util/transcript.ts | 2 +- packages/opencode/src/cli/cmd/tui/worker.ts | 2 +- packages/opencode/src/cli/ui.ts | 2 +- packages/opencode/src/config/config.ts | 10 +- packages/opencode/src/config/markdown.ts | 2 +- packages/opencode/src/file/ripgrep.ts | 2 +- packages/opencode/src/ide/index.ts | 2 +- packages/opencode/src/index.ts | 2 +- packages/opencode/src/installation/index.ts | 16 +- packages/opencode/src/lsp/client.ts | 2 +- packages/opencode/src/mcp/index.ts | 2 +- packages/opencode/src/plugin/codex.ts | 2 +- packages/opencode/src/plugin/copilot.ts | 2 +- packages/opencode/src/plugin/index.ts | 8 +- packages/opencode/src/project/project.ts | 2 +- packages/opencode/src/provider/auth.ts | 4 +- packages/opencode/src/provider/provider.ts | 2 +- packages/opencode/src/pty/index.ts | 2 +- packages/opencode/src/server/server.ts | 2 +- packages/opencode/src/session/index.ts | 2 +- packages/opencode/src/session/message-v2.ts | 2 +- packages/opencode/src/session/message.ts | 2 +- packages/opencode/src/session/prompt.ts | 2 +- packages/opencode/src/session/retry.ts | 2 +- packages/opencode/src/share/share-next.ts | 2 +- packages/opencode/src/skill/skill.ts | 2 +- packages/opencode/src/storage/storage.ts | 2 +- packages/opencode/src/tool/registry.ts | 2 +- packages/opencode/src/worktree/index.ts | 2 +- .../test/acp/event-subscription.test.ts | 2 +- .../opencode/test/cli/tui/transcript.test.ts | 2 +- packages/opencode/test/session/retry.test.ts | 2 +- packages/opencode/test/tool/registry.test.ts | 2 +- packages/plugin/package.json | 6 +- packages/plugin/script/publish.ts | 2 +- packages/plugin/src/index.ts | 2 +- packages/plugin/src/tool.ts | 20 +- packages/script/package.json | 2 +- packages/script/src/index.ts | 2 +- packages/sdk/js/example/example.ts | 2 +- packages/sdk/js/package.json | 4 +- packages/sdk/js/script/publish.ts | 2 +- packages/sdk/js/src/v2/gen/types.gen.ts | 1 + packages/sdk/openapi.json | 8 +- packages/slack/README.md | 2 +- packages/slack/package.json | 6 +- packages/slack/src/index.ts | 2 +- packages/ui/package.json | 8 +- packages/ui/src/components/diff.tsx | 2 +- packages/ui/src/components/list.tsx | 2 +- packages/ui/src/components/markdown.tsx | 2 +- packages/ui/src/components/message-nav.tsx | 2 +- packages/ui/src/components/message-part.tsx | 8 +- packages/ui/src/components/session-review.tsx | 6 +- packages/ui/src/components/session-turn.tsx | 4 +- packages/ui/src/context/data.tsx | 2 +- packages/util/package.json | 4 +- packages/web/package.json | 4 +- .../web/src/content/docs/custom-tools.mdx | 16 +- packages/web/src/content/docs/ecosystem.mdx | 2 +- packages/web/src/content/docs/plugins.mdx | 14 +- packages/web/src/content/docs/sdk.mdx | 10 +- script/changelog.ts | 4 +- script/duplicate-pr.ts | 2 +- script/publish.ts | 3 +- script/version.ts | 2 +- turbo.json | 2 +- 230 files changed, 978 insertions(+), 805 deletions(-) create mode 100644 packages/app/src/components/session-lsp-indicator.tsx create mode 100644 packages/app/src/components/session-mcp-indicator.tsx diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index a1b492258b73..5a602767aa7c 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -33,7 +33,7 @@ permissions: jobs: version: runs-on: blacksmith-4vcpu-ubuntu-2404 - if: github.repository == 'anomalyco/opencode' + if: always() && github.repository == 'AryaLabsHQ/opencoder' && (github.event_name != 'workflow_dispatch' || needs.test.result == 'success') steps: - uses: actions/checkout@v3 with: @@ -43,16 +43,39 @@ jobs: - name: Install OpenCode if: inputs.bump || inputs.version - run: bun i -g opencode-ai + run: bun i -g opencoder-ai@1.0.169 - - id: version + # Docker not needed for fork + # - name: Login to GitHub Container Registry + # uses: docker/login-action@v3 + # with: + # registry: ghcr.io + # username: ${{ github.repository_owner }} + # password: ${{ secrets.GITHUB_TOKEN }} + + # - name: Set up QEMU + # uses: docker/setup-qemu-action@v3 + + # - name: Set up Docker Buildx + # uses: docker/setup-buildx-action@v3 + + - uses: actions/setup-node@v4 + with: + node-version: "24" + registry-url: "https://registry.npmjs.org" + + - name: Setup Git Identity + id: version run: | ./script/version.ts env: GH_TOKEN: ${{ github.token }} OPENCODE_BUMP: ${{ inputs.bump }} OPENCODE_VERSION: ${{ inputs.version }} - OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }} + # OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }} + # AUR_KEY: ${{ secrets.AUR_KEY }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NPM_CONFIG_PROVENANCE: false outputs: version: ${{ steps.version.outputs.version }} release: ${{ steps.version.outputs.release }} @@ -61,7 +84,7 @@ jobs: build-cli: needs: version runs-on: blacksmith-4vcpu-ubuntu-2404 - if: github.repository == 'anomalyco/opencode' + if: github.repository == 'AryaLabsHQ/opencoder' steps: - uses: actions/checkout@v3 with: diff --git a/.opencode/tool/github-pr-search.ts b/.opencode/tool/github-pr-search.ts index 587fdfaaf28c..040369aa0cd4 100644 --- a/.opencode/tool/github-pr-search.ts +++ b/.opencode/tool/github-pr-search.ts @@ -1,5 +1,5 @@ /// -import { tool } from "@opencode-ai/plugin" +import { tool } from "@opencoder-ai/plugin" import DESCRIPTION from "./github-pr-search.txt" async function githubFetch(endpoint: string, options: RequestInit = {}) { diff --git a/.opencode/tool/github-triage.ts b/.opencode/tool/github-triage.ts index 1e216f1c8daa..d89d983bc6d8 100644 --- a/.opencode/tool/github-triage.ts +++ b/.opencode/tool/github-triage.ts @@ -1,6 +1,6 @@ /// // import { Octokit } from "@octokit/rest" -import { tool } from "@opencode-ai/plugin" +import { tool } from "@opencoder-ai/plugin" import DESCRIPTION from "./github-triage.txt" function getIssueNumber(): number { diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4bec009ef467..b311ab902a5b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -69,7 +69,7 @@ Replace `` with your platform (e.g., `darwin-arm64`, `linux-x64`). - `packages/opencode/src/cli/cmd/tui/`: The TUI code, written in SolidJS with [opentui](https://github.com/sst/opentui) - `packages/app`: The shared web UI components, written in SolidJS - `packages/desktop`: The native desktop app, built with Tauri (wraps `packages/app`) - - `packages/plugin`: Source for `@opencode-ai/plugin` + - `packages/plugin`: Source for `@opencoder-ai/plugin` ### Understanding bun dev vs opencode diff --git a/bun.lock b/bun.lock index 4a054c648301..54ce52d34e00 100644 --- a/bun.lock +++ b/bun.lock @@ -3,12 +3,12 @@ "configVersion": 1, "workspaces": { "": { - "name": "opencode", + "name": "opencoder", "dependencies": { "@aws-sdk/client-s3": "3.933.0", - "@opencode-ai/plugin": "workspace:*", - "@opencode-ai/script": "workspace:*", - "@opencode-ai/sdk": "workspace:*", + "@opencoder-ai/plugin": "workspace:*", + "@opencoder-ai/script": "workspace:*", + "@opencoder-ai/sdk": "workspace:*", "typescript": "catalog:", }, "devDependencies": { @@ -22,13 +22,13 @@ }, }, "packages/app": { - "name": "@opencode-ai/app", - "version": "1.1.65", + "name": "@opencoder-ai/app", + "version": "1.1.63", "dependencies": { "@kobalte/core": "catalog:", - "@opencode-ai/sdk": "workspace:*", - "@opencode-ai/ui": "workspace:*", - "@opencode-ai/util": "workspace:*", + "@opencoder-ai/sdk": "workspace:*", + "@opencoder-ai/ui": "workspace:*", + "@opencoder-ai/util": "workspace:*", "@shikijs/transformers": "3.9.2", "@solid-primitives/active-element": "2.1.3", "@solid-primitives/audio": "1.4.2", @@ -72,18 +72,18 @@ }, }, "packages/console/app": { - "name": "@opencode-ai/console-app", - "version": "1.1.65", + "name": "@opencoder-ai/console-app", + "version": "1.1.63", "dependencies": { "@cloudflare/vite-plugin": "1.15.2", "@ibm/plex": "6.4.1", "@jsx-email/render": "1.1.1", "@kobalte/core": "catalog:", "@openauthjs/openauth": "catalog:", - "@opencode-ai/console-core": "workspace:*", - "@opencode-ai/console-mail": "workspace:*", - "@opencode-ai/console-resource": "workspace:*", - "@opencode-ai/ui": "workspace:*", + "@opencoder-ai/console-core": "workspace:*", + "@opencoder-ai/console-mail": "workspace:*", + "@opencoder-ai/console-resource": "workspace:*", + "@opencoder-ai/ui": "workspace:*", "@smithy/eventstream-codec": "4.2.7", "@smithy/util-utf8": "4.2.0", "@solidjs/meta": "catalog:", @@ -106,13 +106,13 @@ }, }, "packages/console/core": { - "name": "@opencode-ai/console-core", - "version": "1.1.65", + "name": "@opencoder-ai/console-core", + "version": "1.1.63", "dependencies": { "@aws-sdk/client-sts": "3.782.0", "@jsx-email/render": "1.1.1", - "@opencode-ai/console-mail": "workspace:*", - "@opencode-ai/console-resource": "workspace:*", + "@opencoder-ai/console-mail": "workspace:*", + "@opencoder-ai/console-resource": "workspace:*", "@planetscale/database": "1.19.0", "aws4fetch": "1.0.20", "drizzle-orm": "0.41.0", @@ -133,16 +133,16 @@ }, }, "packages/console/function": { - "name": "@opencode-ai/console-function", - "version": "1.1.65", + "name": "@opencoder-ai/console-function", + "version": "1.1.63", "dependencies": { "@ai-sdk/anthropic": "2.0.0", "@ai-sdk/openai": "2.0.2", "@ai-sdk/openai-compatible": "1.0.1", "@hono/zod-validator": "catalog:", "@openauthjs/openauth": "0.0.0-20250322224806", - "@opencode-ai/console-core": "workspace:*", - "@opencode-ai/console-resource": "workspace:*", + "@opencoder-ai/console-core": "workspace:*", + "@opencoder-ai/console-resource": "workspace:*", "ai": "catalog:", "hono": "catalog:", "zod": "catalog:", @@ -157,8 +157,8 @@ }, }, "packages/console/mail": { - "name": "@opencode-ai/console-mail", - "version": "1.1.65", + "name": "@opencoder-ai/console-mail", + "version": "1.1.63", "dependencies": { "@jsx-email/all": "2.2.3", "@jsx-email/cli": "1.4.3", @@ -169,7 +169,7 @@ }, }, "packages/console/resource": { - "name": "@opencode-ai/console-resource", + "name": "@opencoder-ai/console-resource", "dependencies": { "@cloudflare/workers-types": "catalog:", }, @@ -181,11 +181,11 @@ }, }, "packages/desktop": { - "name": "@opencode-ai/desktop", - "version": "1.1.65", + "name": "@opencoder-ai/desktop", + "version": "1.1.63", "dependencies": { - "@opencode-ai/app": "workspace:*", - "@opencode-ai/ui": "workspace:*", + "@opencoder-ai/app": "workspace:*", + "@opencoder-ai/ui": "workspace:*", "@solid-primitives/i18n": "2.2.1", "@solid-primitives/storage": "catalog:", "@solidjs/meta": "catalog:", @@ -214,11 +214,11 @@ }, }, "packages/enterprise": { - "name": "@opencode-ai/enterprise", - "version": "1.1.65", + "name": "@opencoder-ai/enterprise", + "version": "1.1.63", "dependencies": { - "@opencode-ai/ui": "workspace:*", - "@opencode-ai/util": "workspace:*", + "@opencoder-ai/ui": "workspace:*", + "@opencoder-ai/util": "workspace:*", "@pierre/diffs": "catalog:", "@solidjs/meta": "catalog:", "@solidjs/router": "catalog:", @@ -243,8 +243,8 @@ }, }, "packages/function": { - "name": "@opencode-ai/function", - "version": "1.1.65", + "name": "@opencoder-ai/function", + "version": "1.1.63", "dependencies": { "@octokit/auth-app": "8.0.1", "@octokit/rest": "catalog:", @@ -259,8 +259,8 @@ }, }, "packages/opencode": { - "name": "opencode", - "version": "1.1.65", + "name": "opencoder", + "version": "1.1.63", "bin": { "opencode": "./bin/opencode", }, @@ -268,12 +268,12 @@ "@actions/core": "1.11.1", "@actions/github": "6.0.1", "@agentclientprotocol/sdk": "0.14.1", - "@ai-sdk/amazon-bedrock": "3.0.79", - "@ai-sdk/anthropic": "2.0.62", + "@ai-sdk/amazon-bedrock": "3.0.74", + "@ai-sdk/anthropic": "2.0.58", "@ai-sdk/azure": "2.0.91", "@ai-sdk/cerebras": "1.0.36", "@ai-sdk/cohere": "2.0.22", - "@ai-sdk/deepinfra": "1.0.36", + "@ai-sdk/deepinfra": "1.0.33", "@ai-sdk/gateway": "2.0.30", "@ai-sdk/google": "2.0.52", "@ai-sdk/google-vertex": "3.0.98", @@ -296,10 +296,10 @@ "@octokit/graphql": "9.0.2", "@octokit/rest": "catalog:", "@openauthjs/openauth": "catalog:", - "@opencode-ai/plugin": "workspace:*", - "@opencode-ai/script": "workspace:*", - "@opencode-ai/sdk": "workspace:*", - "@opencode-ai/util": "workspace:*", + "@opencoder-ai/plugin": "workspace:*", + "@opencoder-ai/script": "workspace:*", + "@opencoder-ai/sdk": "workspace:*", + "@opencoder-ai/util": "workspace:*", "@openrouter/ai-sdk-provider": "1.5.4", "@opentui/core": "0.1.79", "@opentui/solid": "0.1.79", @@ -343,7 +343,7 @@ "devDependencies": { "@babel/core": "7.28.4", "@octokit/webhooks-types": "7.6.1", - "@opencode-ai/script": "workspace:*", + "@opencoder-ai/script": "workspace:*", "@parcel/watcher-darwin-arm64": "2.5.1", "@parcel/watcher-darwin-x64": "2.5.1", "@parcel/watcher-linux-arm64-glibc": "2.5.1", @@ -365,10 +365,10 @@ }, }, "packages/plugin": { - "name": "@opencode-ai/plugin", - "version": "1.1.65", + "name": "@opencoder-ai/plugin", + "version": "1.1.63", "dependencies": { - "@opencode-ai/sdk": "workspace:*", + "@opencoder-ai/sdk": "workspace:*", "zod": "catalog:", }, "devDependencies": { @@ -379,14 +379,14 @@ }, }, "packages/script": { - "name": "@opencode-ai/script", + "name": "@opencoder-ai/script", "devDependencies": { "@types/bun": "catalog:", }, }, "packages/sdk/js": { - "name": "@opencode-ai/sdk", - "version": "1.1.65", + "name": "@opencoder-ai/sdk", + "version": "1.1.63", "devDependencies": { "@hey-api/openapi-ts": "0.90.10", "@tsconfig/node22": "catalog:", @@ -396,10 +396,10 @@ }, }, "packages/slack": { - "name": "@opencode-ai/slack", - "version": "1.1.65", + "name": "@opencoder-ai/slack", + "version": "1.1.63", "dependencies": { - "@opencode-ai/sdk": "workspace:*", + "@opencoder-ai/sdk": "workspace:*", "@slack/bolt": "^3.17.1", }, "devDependencies": { @@ -409,12 +409,12 @@ }, }, "packages/ui": { - "name": "@opencode-ai/ui", - "version": "1.1.65", + "name": "@opencoder-ai/ui", + "version": "1.1.63", "dependencies": { "@kobalte/core": "catalog:", - "@opencode-ai/sdk": "workspace:*", - "@opencode-ai/util": "workspace:*", + "@opencoder-ai/sdk": "workspace:*", + "@opencoder-ai/util": "workspace:*", "@pierre/diffs": "catalog:", "@shikijs/transformers": "3.9.2", "@solid-primitives/bounds": "0.1.3", @@ -451,8 +451,8 @@ }, }, "packages/util": { - "name": "@opencode-ai/util", - "version": "1.1.65", + "name": "@opencoder-ai/util", + "version": "1.1.63", "dependencies": { "zod": "catalog:", }, @@ -462,8 +462,8 @@ }, }, "packages/web": { - "name": "@opencode-ai/web", - "version": "1.1.65", + "name": "@opencoder-ai/web", + "version": "1.1.63", "dependencies": { "@astrojs/cloudflare": "12.6.3", "@astrojs/markdown-remark": "6.3.1", @@ -565,7 +565,7 @@ "@agentclientprotocol/sdk": ["@agentclientprotocol/sdk@0.14.1", "", { "peerDependencies": { "zod": "^3.25.0 || ^4.0.0" } }, "sha512-b6r3PS3Nly+Wyw9U+0nOr47bV8tfS476EgyEMhoKvJCZLbgqoDFN7DJwkxL88RR0aiOqOYV1ZnESHqb+RmdH8w=="], - "@ai-sdk/amazon-bedrock": ["@ai-sdk/amazon-bedrock@3.0.79", "", { "dependencies": { "@ai-sdk/anthropic": "2.0.62", "@ai-sdk/provider": "2.0.1", "@ai-sdk/provider-utils": "3.0.21", "@smithy/eventstream-codec": "^4.0.1", "@smithy/util-utf8": "^4.0.0", "aws4fetch": "^1.0.20" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-GfAQUb1GEmdTjLu5Ud1d5sieNHDpwoQdb4S14KmJlA5RsGREUZ1tfSKngFaiClxFtL0xPSZjePhTMV6Z65A7/g=="], + "@ai-sdk/amazon-bedrock": ["@ai-sdk/amazon-bedrock@3.0.74", "", { "dependencies": { "@ai-sdk/anthropic": "2.0.58", "@ai-sdk/provider": "2.0.1", "@ai-sdk/provider-utils": "3.0.20", "@smithy/eventstream-codec": "^4.0.1", "@smithy/util-utf8": "^4.0.0", "aws4fetch": "^1.0.20" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-q83HE3FBb/HPIvjXsehrHOgCuGHPorSMFt6BYnzIYZy8gNnSqV1OWX4oXVsCAuYPPMtYW/KMK35hmoIFV8QKoQ=="], "@ai-sdk/anthropic": ["@ai-sdk/anthropic@2.0.0", "", { "dependencies": { "@ai-sdk/provider": "2.0.0", "@ai-sdk/provider-utils": "3.0.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4" } }, "sha512-uyyaO4KhxoIKZztREqLPh+6/K3ZJx/rp72JKoUEL9/kC+vfQTThUfPnY/bUryUpcnawx8IY/tSoYNOi/8PCv7w=="], @@ -577,7 +577,7 @@ "@ai-sdk/deepgram": ["@ai-sdk/deepgram@1.0.22", "", { "dependencies": { "@ai-sdk/provider": "2.0.1", "@ai-sdk/provider-utils": "3.0.20" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-lqmINr+1Jy2yGXxnQB6IrC2xMtUY5uK96pyKfqTj1kLlXGatKnJfXF7WTkOGgQrFqIYqpjDz+sPVR3n0KUEUtA=="], - "@ai-sdk/deepinfra": ["@ai-sdk/deepinfra@1.0.36", "", { "dependencies": { "@ai-sdk/openai-compatible": "1.0.33", "@ai-sdk/provider": "2.0.1", "@ai-sdk/provider-utils": "3.0.21" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-LndvRktEgY2IFu4peDJMEXcjhHEEFtM0upLx/J64kCpFHCifalXpK4PPSX3PVndnn0bJzvamO5+fc0z2ooqBZw=="], + "@ai-sdk/deepinfra": ["@ai-sdk/deepinfra@1.0.33", "", { "dependencies": { "@ai-sdk/openai-compatible": "1.0.32", "@ai-sdk/provider": "2.0.1", "@ai-sdk/provider-utils": "3.0.20" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-hn2y8Q+2iZgGNVJyzPsH8EECECryFMVmxBJrBvBWoi8xcJPRyt0fZP5dOSLyGg3q0oxmPS9M0Eq0NNlKot/bYQ=="], "@ai-sdk/deepseek": ["@ai-sdk/deepseek@1.0.33", "", { "dependencies": { "@ai-sdk/provider": "2.0.1", "@ai-sdk/provider-utils": "3.0.20" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-NiKjvqXI/96e/7SjZGgQH141PBqggsF7fNbjGTv4RgVWayMXp9mj0Ou2NjAUGwwxJwj/qseY0gXiDCYaHWFBkw=="], @@ -975,7 +975,7 @@ "@gitlab/gitlab-ai-provider": ["@gitlab/gitlab-ai-provider@3.5.0", "", { "dependencies": { "@anthropic-ai/sdk": "^0.71.0", "@anycable/core": "^0.9.2", "graphql-request": "^6.1.0", "isomorphic-ws": "^5.0.0", "openai": "^6.16.0", "socket.io-client": "^4.8.1", "vscode-jsonrpc": "^8.2.1", "zod": "^3.25.76" }, "peerDependencies": { "@ai-sdk/provider": ">=2.0.0", "@ai-sdk/provider-utils": ">=3.0.0" } }, "sha512-OoAwCz4fOci3h/2l+PRHMclclh3IaFq8w1es2wvBJ8ca7vtglKsBYT7dvmYpsXlu7pg9mopbjcexvmVCQEUTAQ=="], - "@gitlab/opencode-gitlab-auth": ["@gitlab/opencode-gitlab-auth@1.3.2", "", { "dependencies": { "@fastify/rate-limit": "^10.2.0", "@opencode-ai/plugin": "*", "fastify": "^5.2.0", "open": "^10.0.0" } }, "sha512-pvGrC+aDVLY8bRCC/fZaG/Qihvt2r4by5xbTo5JTSz9O7yIcR6xG2d9Wkuu4bcXFz674z2C+i5bUk+J/RSdBpg=="], + "@gitlab/opencode-gitlab-auth": ["@gitlab/opencode-gitlab-auth@1.3.2", "", { "dependencies": { "@fastify/rate-limit": "^10.2.0", "@opencoder-ai/plugin": "*", "fastify": "^5.2.0", "open": "^10.0.0" } }, "sha512-pvGrC+aDVLY8bRCC/fZaG/Qihvt2r4by5xbTo5JTSz9O7yIcR6xG2d9Wkuu4bcXFz674z2C+i5bUk+J/RSdBpg=="], "@graphql-typed-document-node/core": ["@graphql-typed-document-node/core@3.2.0", "", { "peerDependencies": { "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ=="], @@ -1241,37 +1241,37 @@ "@openauthjs/openauth": ["@openauthjs/openauth@0.0.0-20250322224806", "", { "dependencies": { "@standard-schema/spec": "1.0.0-beta.3", "aws4fetch": "1.0.20", "jose": "5.9.6" }, "peerDependencies": { "arctic": "^2.2.2", "hono": "^4.0.0" } }, "sha512-p5IWSRXvABcwocH2dNI0w8c1QJelIOFulwhKk+aLLFfUbs8u1pr7kQbYe8yCSM2+bcLHiwbogpUQc2ovrGwCuw=="], - "@opencode-ai/app": ["@opencode-ai/app@workspace:packages/app"], + "@opencoder-ai/app": ["@opencoder-ai/app@workspace:packages/app"], - "@opencode-ai/console-app": ["@opencode-ai/console-app@workspace:packages/console/app"], + "@opencoder-ai/console-app": ["@opencoder-ai/console-app@workspace:packages/console/app"], - "@opencode-ai/console-core": ["@opencode-ai/console-core@workspace:packages/console/core"], + "@opencoder-ai/console-core": ["@opencoder-ai/console-core@workspace:packages/console/core"], - "@opencode-ai/console-function": ["@opencode-ai/console-function@workspace:packages/console/function"], + "@opencoder-ai/console-function": ["@opencoder-ai/console-function@workspace:packages/console/function"], - "@opencode-ai/console-mail": ["@opencode-ai/console-mail@workspace:packages/console/mail"], + "@opencoder-ai/console-mail": ["@opencoder-ai/console-mail@workspace:packages/console/mail"], - "@opencode-ai/console-resource": ["@opencode-ai/console-resource@workspace:packages/console/resource"], + "@opencoder-ai/console-resource": ["@opencoder-ai/console-resource@workspace:packages/console/resource"], - "@opencode-ai/desktop": ["@opencode-ai/desktop@workspace:packages/desktop"], + "@opencoder-ai/desktop": ["@opencoder-ai/desktop@workspace:packages/desktop"], - "@opencode-ai/enterprise": ["@opencode-ai/enterprise@workspace:packages/enterprise"], + "@opencoder-ai/enterprise": ["@opencoder-ai/enterprise@workspace:packages/enterprise"], - "@opencode-ai/function": ["@opencode-ai/function@workspace:packages/function"], + "@opencoder-ai/function": ["@opencoder-ai/function@workspace:packages/function"], - "@opencode-ai/plugin": ["@opencode-ai/plugin@workspace:packages/plugin"], + "@opencoder-ai/plugin": ["@opencoder-ai/plugin@workspace:packages/plugin"], - "@opencode-ai/script": ["@opencode-ai/script@workspace:packages/script"], + "@opencoder-ai/script": ["@opencoder-ai/script@workspace:packages/script"], - "@opencode-ai/sdk": ["@opencode-ai/sdk@workspace:packages/sdk/js"], + "@opencoder-ai/sdk": ["@opencoder-ai/sdk@workspace:packages/sdk/js"], - "@opencode-ai/slack": ["@opencode-ai/slack@workspace:packages/slack"], + "@opencoder-ai/slack": ["@opencoder-ai/slack@workspace:packages/slack"], - "@opencode-ai/ui": ["@opencode-ai/ui@workspace:packages/ui"], + "@opencoder-ai/ui": ["@opencoder-ai/ui@workspace:packages/ui"], - "@opencode-ai/util": ["@opencode-ai/util@workspace:packages/util"], + "@opencoder-ai/util": ["@opencoder-ai/util@workspace:packages/util"], - "@opencode-ai/web": ["@opencode-ai/web@workspace:packages/web"], + "@opencoder-ai/web": ["@opencoder-ai/web@workspace:packages/web"], "@openrouter/ai-sdk-provider": ["@openrouter/ai-sdk-provider@1.5.4", "", { "dependencies": { "@openrouter/sdk": "^0.1.27" }, "peerDependencies": { "ai": "^5.0.0", "zod": "^3.24.1 || ^v4" } }, "sha512-xrSQPUIH8n9zuyYZR0XK7Ba0h2KsjJcMkxnwaYfmv13pKs3sDkjPzVPPhlhzqBGddHb5cFEwJ9VFuFeDcxCDSw=="], @@ -4151,9 +4151,7 @@ "@actions/http-client/undici": ["undici@6.23.0", "", {}, "sha512-VfQPToRA5FZs/qJxLIinmU59u0r7LXqoJkCzinq3ckNJp3vKEh7jTWN589YQ5+aoAC/TGRLyJLCPKcLQbM8r9g=="], - "@ai-sdk/amazon-bedrock/@ai-sdk/anthropic": ["@ai-sdk/anthropic@2.0.62", "", { "dependencies": { "@ai-sdk/provider": "2.0.1", "@ai-sdk/provider-utils": "3.0.21" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-I3RhaOEMnWlWnrvjNBOYvUb19Dwf2nw01IruZrVJRDi688886e11wnd5DxrBZLd2V29Gizo3vpOPnnExsA+wTA=="], - - "@ai-sdk/amazon-bedrock/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@3.0.21", "", { "dependencies": { "@ai-sdk/provider": "2.0.1", "@standard-schema/spec": "^1.0.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-veuMwTLxsgh31Jjn0SnBABnM1f7ebHhRWcV2ZuY3hP3iJDCZ8VXBaYqcHXoOQDqUXTCas08sKQcHyWK+zl882Q=="], + "@ai-sdk/amazon-bedrock/@ai-sdk/anthropic": ["@ai-sdk/anthropic@2.0.58", "", { "dependencies": { "@ai-sdk/provider": "2.0.1", "@ai-sdk/provider-utils": "3.0.20" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-CkNW5L1Arv8gPtPlEmKd+yf/SG9ucJf0XQdpMG8OiYEtEMc2smuCA+tyCp8zI7IBVg/FE7nUfFHntQFaOjRwJQ=="], "@ai-sdk/amazon-bedrock/@smithy/eventstream-codec": ["@smithy/eventstream-codec@4.2.8", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.12.0", "@smithy/util-hex-encoding": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-jS/O5Q14UsufqoGhov7dHLOPCzkYJl9QDzusI2Psh4wyYx/izhzvX9P4D69aTxcdfVhEPhjK+wYyn/PzLjKbbw=="], @@ -4165,9 +4163,7 @@ "@ai-sdk/cerebras/@ai-sdk/openai-compatible": ["@ai-sdk/openai-compatible@1.0.32", "", { "dependencies": { "@ai-sdk/provider": "2.0.1", "@ai-sdk/provider-utils": "3.0.20" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-YspqqyJPzHjqWrjt4y/Wgc2aJgCcQj5uIJgZpq2Ar/lH30cEVhgE+keePDbjKpetD9UwNggCj7u6kO3unS23OQ=="], - "@ai-sdk/deepinfra/@ai-sdk/openai-compatible": ["@ai-sdk/openai-compatible@1.0.33", "", { "dependencies": { "@ai-sdk/provider": "2.0.1", "@ai-sdk/provider-utils": "3.0.21" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-2KMcR2xAul3u5dGZD7gONgbIki3Hg7Ey+sFu7gsiJ4U2iRU0GDV3ccNq79dTuAEXPDFcOWCUpW8A8jXc0kxJxQ=="], - - "@ai-sdk/deepinfra/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@3.0.21", "", { "dependencies": { "@ai-sdk/provider": "2.0.1", "@standard-schema/spec": "^1.0.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-veuMwTLxsgh31Jjn0SnBABnM1f7ebHhRWcV2ZuY3hP3iJDCZ8VXBaYqcHXoOQDqUXTCas08sKQcHyWK+zl882Q=="], + "@ai-sdk/deepinfra/@ai-sdk/openai-compatible": ["@ai-sdk/openai-compatible@1.0.32", "", { "dependencies": { "@ai-sdk/provider": "2.0.1", "@ai-sdk/provider-utils": "3.0.20" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-YspqqyJPzHjqWrjt4y/Wgc2aJgCcQj5uIJgZpq2Ar/lH30cEVhgE+keePDbjKpetD9UwNggCj7u6kO3unS23OQ=="], "@ai-sdk/fireworks/@ai-sdk/openai-compatible": ["@ai-sdk/openai-compatible@1.0.32", "", { "dependencies": { "@ai-sdk/provider": "2.0.1", "@ai-sdk/provider-utils": "3.0.20" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-YspqqyJPzHjqWrjt4y/Wgc2aJgCcQj5uIJgZpq2Ar/lH30cEVhgE+keePDbjKpetD9UwNggCj7u6kO3unS23OQ=="], @@ -4379,11 +4375,11 @@ "@openauthjs/openauth/jose": ["jose@5.9.6", "", {}, "sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ=="], - "@opencode-ai/desktop/@actions/artifact": ["@actions/artifact@4.0.0", "", { "dependencies": { "@actions/core": "^1.10.0", "@actions/github": "^6.0.1", "@actions/http-client": "^2.1.0", "@azure/core-http": "^3.0.5", "@azure/storage-blob": "^12.15.0", "@octokit/core": "^5.2.1", "@octokit/plugin-request-log": "^1.0.4", "@octokit/plugin-retry": "^3.0.9", "@octokit/request": "^8.4.1", "@octokit/request-error": "^5.1.1", "@protobuf-ts/plugin": "^2.2.3-alpha.1", "archiver": "^7.0.1", "jwt-decode": "^3.1.2", "unzip-stream": "^0.3.1" } }, "sha512-HCc2jMJRAfviGFAh0FsOR/jNfWhirxl7W6z8zDtttt0GltwxBLdEIjLiweOPFl9WbyJRW1VWnPUSAixJqcWUMQ=="], + "@opencoder-ai/desktop/@actions/artifact": ["@actions/artifact@4.0.0", "", { "dependencies": { "@actions/core": "^1.10.0", "@actions/github": "^6.0.1", "@actions/http-client": "^2.1.0", "@azure/core-http": "^3.0.5", "@azure/storage-blob": "^12.15.0", "@octokit/core": "^5.2.1", "@octokit/plugin-request-log": "^1.0.4", "@octokit/plugin-retry": "^3.0.9", "@octokit/request": "^8.4.1", "@octokit/request-error": "^5.1.1", "@protobuf-ts/plugin": "^2.2.3-alpha.1", "archiver": "^7.0.1", "jwt-decode": "^3.1.2", "unzip-stream": "^0.3.1" } }, "sha512-HCc2jMJRAfviGFAh0FsOR/jNfWhirxl7W6z8zDtttt0GltwxBLdEIjLiweOPFl9WbyJRW1VWnPUSAixJqcWUMQ=="], - "@opencode-ai/desktop/typescript": ["typescript@5.6.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw=="], + "@opencoder-ai/desktop/typescript": ["typescript@5.6.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw=="], - "@opencode-ai/web/@shikijs/transformers": ["@shikijs/transformers@3.20.0", "", { "dependencies": { "@shikijs/core": "3.20.0", "@shikijs/types": "3.20.0" } }, "sha512-PrHHMRr3Q5W1qB/42kJW6laqFyWdhrPF2hNR9qjOm1xcSiAO3hAHo7HaVyHE6pMyevmy3i51O8kuGGXC78uK3g=="], + "@opencoder-ai/web/@shikijs/transformers": ["@shikijs/transformers@3.20.0", "", { "dependencies": { "@shikijs/core": "3.20.0", "@shikijs/types": "3.20.0" } }, "sha512-PrHHMRr3Q5W1qB/42kJW6laqFyWdhrPF2hNR9qjOm1xcSiAO3hAHo7HaVyHE6pMyevmy3i51O8kuGGXC78uK3g=="], "@opentui/solid/@babel/core": ["@babel/core@7.28.0", "", { "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.0", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-module-transforms": "^7.27.3", "@babel/helpers": "^7.27.6", "@babel/parser": "^7.28.0", "@babel/template": "^7.27.2", "@babel/traverse": "^7.28.0", "@babel/types": "^7.28.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ=="], @@ -4457,8 +4453,6 @@ "accepts/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], - "ai-gateway-provider/@ai-sdk/amazon-bedrock": ["@ai-sdk/amazon-bedrock@3.0.74", "", { "dependencies": { "@ai-sdk/anthropic": "2.0.58", "@ai-sdk/provider": "2.0.1", "@ai-sdk/provider-utils": "3.0.20", "@smithy/eventstream-codec": "^4.0.1", "@smithy/util-utf8": "^4.0.0", "aws4fetch": "^1.0.20" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-q83HE3FBb/HPIvjXsehrHOgCuGHPorSMFt6BYnzIYZy8gNnSqV1OWX4oXVsCAuYPPMtYW/KMK35hmoIFV8QKoQ=="], - "ai-gateway-provider/@ai-sdk/anthropic": ["@ai-sdk/anthropic@2.0.58", "", { "dependencies": { "@ai-sdk/provider": "2.0.1", "@ai-sdk/provider-utils": "3.0.20" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-CkNW5L1Arv8gPtPlEmKd+yf/SG9ucJf0XQdpMG8OiYEtEMc2smuCA+tyCp8zI7IBVg/FE7nUfFHntQFaOjRwJQ=="], "ai-gateway-provider/@ai-sdk/google-vertex": ["@ai-sdk/google-vertex@3.0.90", "", { "dependencies": { "@ai-sdk/anthropic": "2.0.56", "@ai-sdk/google": "2.0.46", "@ai-sdk/provider": "2.0.0", "@ai-sdk/provider-utils": "3.0.19", "google-auth-library": "^10.5.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-C9MLe1KZGg1ZbupV2osygHtL5qngyCDA6ATatunyfTbIe8TXKG8HGni/3O6ifbnI5qxTidIn150Ox7eIFZVMYg=="], @@ -4581,7 +4575,7 @@ "nypm/tinyexec": ["tinyexec@1.0.2", "", {}, "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg=="], - "opencode/@ai-sdk/anthropic": ["@ai-sdk/anthropic@2.0.62", "", { "dependencies": { "@ai-sdk/provider": "2.0.1", "@ai-sdk/provider-utils": "3.0.21" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-I3RhaOEMnWlWnrvjNBOYvUb19Dwf2nw01IruZrVJRDi688886e11wnd5DxrBZLd2V29Gizo3vpOPnnExsA+wTA=="], + "opencode/@ai-sdk/anthropic": ["@ai-sdk/anthropic@2.0.58", "", { "dependencies": { "@ai-sdk/provider": "2.0.1", "@ai-sdk/provider-utils": "3.0.20" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-CkNW5L1Arv8gPtPlEmKd+yf/SG9ucJf0XQdpMG8OiYEtEMc2smuCA+tyCp8zI7IBVg/FE7nUfFHntQFaOjRwJQ=="], "opencode/@ai-sdk/openai": ["@ai-sdk/openai@2.0.89", "", { "dependencies": { "@ai-sdk/provider": "2.0.1", "@ai-sdk/provider-utils": "3.0.20" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-4+qWkBCbL9HPKbgrUO/F2uXZ8GqrYxHa8SWEYIzxEJ9zvWw3ISr3t1/27O1i8MGSym+PzEyHBT48EV4LAwWaEw=="], @@ -4967,11 +4961,11 @@ "@octokit/rest/@octokit/core/before-after-hook": ["before-after-hook@4.0.0", "", {}, "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ=="], - "@opencode-ai/desktop/@actions/artifact/@actions/http-client": ["@actions/http-client@2.2.3", "", { "dependencies": { "tunnel": "^0.0.6", "undici": "^5.25.4" } }, "sha512-mx8hyJi/hjFvbPokCg4uRd4ZX78t+YyRPtnKWwIl+RzNaVuFpQHfmlGVfsKEJN8LwTCvL+DfVgAM04XaHkm6bA=="], + "@opencoder-ai/desktop/@actions/artifact/@actions/http-client": ["@actions/http-client@2.2.3", "", { "dependencies": { "tunnel": "^0.0.6", "undici": "^5.25.4" } }, "sha512-mx8hyJi/hjFvbPokCg4uRd4ZX78t+YyRPtnKWwIl+RzNaVuFpQHfmlGVfsKEJN8LwTCvL+DfVgAM04XaHkm6bA=="], - "@opencode-ai/web/@shikijs/transformers/@shikijs/core": ["@shikijs/core@3.20.0", "", { "dependencies": { "@shikijs/types": "3.20.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "sha512-f2ED7HYV4JEk827mtMDwe/yQ25pRiXZmtHjWF8uzZKuKiEsJR7Ce1nuQ+HhV9FzDcbIo4ObBCD9GPTzNuy9S1g=="], + "@opencoder-ai/web/@shikijs/transformers/@shikijs/core": ["@shikijs/core@3.20.0", "", { "dependencies": { "@shikijs/types": "3.20.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "sha512-f2ED7HYV4JEk827mtMDwe/yQ25pRiXZmtHjWF8uzZKuKiEsJR7Ce1nuQ+HhV9FzDcbIo4ObBCD9GPTzNuy9S1g=="], - "@opencode-ai/web/@shikijs/transformers/@shikijs/types": ["@shikijs/types@3.20.0", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-lhYAATn10nkZcBQ0BlzSbJA3wcmL5MXUUF8d2Zzon6saZDlToKaiRX60n2+ZaHJCmXEcZRWNzn+k9vplr8Jhsw=="], + "@opencoder-ai/web/@shikijs/transformers/@shikijs/types": ["@shikijs/types@3.20.0", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-lhYAATn10nkZcBQ0BlzSbJA3wcmL5MXUUF8d2Zzon6saZDlToKaiRX60n2+ZaHJCmXEcZRWNzn+k9vplr8Jhsw=="], "@opentui/solid/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], @@ -5001,8 +4995,6 @@ "accepts/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], - "ai-gateway-provider/@ai-sdk/amazon-bedrock/@smithy/eventstream-codec": ["@smithy/eventstream-codec@4.2.8", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.12.0", "@smithy/util-hex-encoding": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-jS/O5Q14UsufqoGhov7dHLOPCzkYJl9QDzusI2Psh4wyYx/izhzvX9P4D69aTxcdfVhEPhjK+wYyn/PzLjKbbw=="], - "ai-gateway-provider/@ai-sdk/google-vertex/@ai-sdk/anthropic": ["@ai-sdk/anthropic@2.0.56", "", { "dependencies": { "@ai-sdk/provider": "2.0.0", "@ai-sdk/provider-utils": "3.0.19" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-XHJKu0Yvfu9SPzRfsAFESa+9T7f2YJY6TxykKMfRsAwpeWAiX/Gbx5J5uM15AzYC3Rw8tVP3oH+j7jEivENirQ=="], "ai-gateway-provider/@ai-sdk/google-vertex/@ai-sdk/google": ["@ai-sdk/google@2.0.46", "", { "dependencies": { "@ai-sdk/provider": "2.0.0", "@ai-sdk/provider-utils": "3.0.19" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-8PK6u4sGE/kXebd7ZkTp+0aya4kNqzoqpS5m7cHY2NfTK6fhPc6GNvE+MZIZIoHQTp5ed86wGBdeBPpFaaUtyg=="], @@ -5107,8 +5099,6 @@ "lazystream/readable-stream/string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], - "opencode/@ai-sdk/anthropic/@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@3.0.21", "", { "dependencies": { "@ai-sdk/provider": "2.0.1", "@standard-schema/spec": "^1.0.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-veuMwTLxsgh31Jjn0SnBABnM1f7ebHhRWcV2ZuY3hP3iJDCZ8VXBaYqcHXoOQDqUXTCas08sKQcHyWK+zl882Q=="], - "opencontrol/@modelcontextprotocol/sdk/express": ["express@5.2.1", "", { "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.2.1", "content-disposition": "^1.0.0", "content-type": "^1.0.5", "cookie": "^0.7.1", "cookie-signature": "^1.2.1", "debug": "^4.4.0", "depd": "^2.0.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "finalhandler": "^2.1.0", "fresh": "^2.0.0", "http-errors": "^2.0.0", "merge-descriptors": "^2.0.0", "mime-types": "^3.0.0", "on-finished": "^2.4.1", "once": "^1.4.0", "parseurl": "^1.3.3", "proxy-addr": "^2.0.7", "qs": "^6.14.0", "range-parser": "^1.2.1", "router": "^2.2.0", "send": "^1.1.0", "serve-static": "^2.2.0", "statuses": "^2.0.1", "type-is": "^2.0.1", "vary": "^1.1.2" } }, "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw=="], "opencontrol/@modelcontextprotocol/sdk/pkce-challenge": ["pkce-challenge@4.1.0", "", {}, "sha512-ZBmhE1C9LcPoH9XZSdwiPtbPHZROwAnMy+kIFQVrnMCxY4Cudlz3gBOpzilgc0jOgRaiT3sIWfpMomW2ar2orQ=="], @@ -5297,7 +5287,7 @@ "@octokit/rest/@octokit/core/@octokit/types/@octokit/openapi-types": ["@octokit/openapi-types@27.0.0", "", {}, "sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA=="], - "@opencode-ai/desktop/@actions/artifact/@actions/http-client/undici": ["undici@5.29.0", "", { "dependencies": { "@fastify/busboy": "^2.0.0" } }, "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg=="], + "@opencoder-ai/desktop/@actions/artifact/@actions/http-client/undici": ["undici@5.29.0", "", { "dependencies": { "@fastify/busboy": "^2.0.0" } }, "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg=="], "@slack/web-api/form-data/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], diff --git a/github/bun.lock b/github/bun.lock index 5fb125a7c0c6..7a5955079816 100644 --- a/github/bun.lock +++ b/github/bun.lock @@ -8,7 +8,7 @@ "@actions/github": "6.0.1", "@octokit/graphql": "9.0.1", "@octokit/rest": "22.0.0", - "@opencode-ai/sdk": "0.5.4", + "@opencoder-ai/sdk": "0.5.4", }, "devDependencies": { "@types/bun": "latest", @@ -55,7 +55,7 @@ "@octokit/types": ["@octokit/types@14.1.0", "", { "dependencies": { "@octokit/openapi-types": "^25.1.0" } }, "sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g=="], - "@opencode-ai/sdk": ["@opencode-ai/sdk@0.5.4", "", {}, "sha512-bNT9hJgTvmnWGZU4LM90PMy60xOxxCOI5IaGB5voP2EVj+8RdLxmkwuAB4FUHwLo7fNlmxkZp89NVsMYw2Y3Aw=="], + "@opencoder-ai/sdk": ["@opencoder-ai/sdk@0.5.4", "", {}, "sha512-bNT9hJgTvmnWGZU4LM90PMy60xOxxCOI5IaGB5voP2EVj+8RdLxmkwuAB4FUHwLo7fNlmxkZp89NVsMYw2Y3Aw=="], "@types/bun": ["@types/bun@1.2.20", "", { "dependencies": { "bun-types": "1.2.20" } }, "sha512-dX3RGzQ8+KgmMw7CsW4xT5ITBSCrSbfHc36SNT31EOUg/LA9JWq0VDdEXDRSe1InVWpd2yLUM1FUF/kEOyTzYA=="], diff --git a/github/index.ts b/github/index.ts index da310178a7dc..e4604be2d0a6 100644 --- a/github/index.ts +++ b/github/index.ts @@ -6,7 +6,7 @@ import * as core from "@actions/core" import * as github from "@actions/github" import type { Context as GitHubContext } from "@actions/github/lib/context" import type { IssueCommentEvent, PullRequestReviewCommentEvent } from "@octokit/webhooks-types" -import { createOpencodeClient } from "@opencode-ai/sdk" +import { createOpencodeClient } from "@opencoder-ai/sdk" import { spawn } from "node:child_process" type GitHubAuthor = { diff --git a/github/package.json b/github/package.json index e1b913abedcc..74b81a52262e 100644 --- a/github/package.json +++ b/github/package.json @@ -15,6 +15,6 @@ "@actions/github": "6.0.1", "@octokit/graphql": "9.0.1", "@octokit/rest": "catalog:", - "@opencode-ai/sdk": "workspace:*" + "@opencoder-ai/sdk": "workspace:*" } } diff --git a/install b/install index b0716d532082..2304cab77c0a 100755 --- a/install +++ b/install @@ -1,6 +1,6 @@ #!/usr/bin/env bash set -euo pipefail -APP=opencode +APP=opencoder MUTED='\033[0;2m' RED='\033[0;31m' @@ -181,8 +181,8 @@ else fi if [ -z "$requested_version" ]; then - url="https://github.com/anomalyco/opencode/releases/latest/download/$filename" - specific_version=$(curl -s https://api.github.com/repos/anomalyco/opencode/releases/latest | sed -n 's/.*"tag_name": *"v\([^"]*\)".*/\1/p') + url="https://github.com/AryaLabsHQ/opencoder/releases/latest/download/$filename" + specific_version=$(curl -s https://api.github.com/repos/AryaLabsHQ/opencoder/releases/latest | sed -n 's/.*"tag_name": *"v\([^"]*\)".*/\1/p') if [[ $? -ne 0 || -z "$specific_version" ]]; then echo -e "${RED}Failed to fetch version information${NC}" @@ -191,14 +191,14 @@ else else # Strip leading 'v' if present requested_version="${requested_version#v}" - url="https://github.com/anomalyco/opencode/releases/download/v${requested_version}/$filename" + url="https://github.com/AryaLabsHQ/opencoder/releases/download/v${requested_version}/$filename" specific_version=$requested_version # Verify the release exists before downloading - http_status=$(curl -sI -o /dev/null -w "%{http_code}" "https://github.com/anomalyco/opencode/releases/tag/v${requested_version}") + http_status=$(curl -sI -o /dev/null -w "%{http_code}" "https://github.com/AryaLabsHQ/opencoder/releases/tag/v${requested_version}") if [ "$http_status" = "404" ]; then echo -e "${RED}Error: Release v${requested_version} not found${NC}" - echo -e "${MUTED}Available releases: https://github.com/anomalyco/opencode/releases${NC}" + echo -e "${MUTED}Available releases: https://github.com/AryaLabsHQ/opencoder/releases${NC}" exit 1 fi fi diff --git a/package.json b/package.json index ce3056d81e69..6ece3a257873 100644 --- a/package.json +++ b/package.json @@ -75,9 +75,9 @@ }, "dependencies": { "@aws-sdk/client-s3": "3.933.0", - "@opencode-ai/plugin": "workspace:*", - "@opencode-ai/script": "workspace:*", - "@opencode-ai/sdk": "workspace:*", + "@opencoder-ai/plugin": "workspace:*", + "@opencoder-ai/script": "workspace:*", + "@opencoder-ai/sdk": "workspace:*", "typescript": "catalog:" }, "repository": { diff --git a/packages/app/e2e/files/file-viewer.spec.ts b/packages/app/e2e/files/file-viewer.spec.ts index b968acc130e6..946b515d0829 100644 --- a/packages/app/e2e/files/file-viewer.spec.ts +++ b/packages/app/e2e/files/file-viewer.spec.ts @@ -45,5 +45,5 @@ test("smoke file viewer renders real file content", async ({ page, gotoSession } const code = page.locator('[data-component="code"]').first() await expect(code).toBeVisible() - await expect(code.getByText(/"name"\s*:\s*"@opencode-ai\/app"/)).toBeVisible() + await expect(code.getByText(/"name"\s*:\s*"@opencoder-ai\/app"/)).toBeVisible() }) diff --git a/packages/app/e2e/projects/workspaces.spec.ts b/packages/app/e2e/projects/workspaces.spec.ts index 3867395267b5..83c5d302df38 100644 --- a/packages/app/e2e/projects/workspaces.spec.ts +++ b/packages/app/e2e/projects/workspaces.spec.ts @@ -1,4 +1,4 @@ -import { base64Decode } from "@opencode-ai/util/encode" +import { base64Decode } from "@opencoder-ai/util/encode" import fs from "node:fs/promises" import os from "node:os" import path from "node:path" diff --git a/packages/app/e2e/utils.ts b/packages/app/e2e/utils.ts index ec6cdf830230..e913599ff96f 100644 --- a/packages/app/e2e/utils.ts +++ b/packages/app/e2e/utils.ts @@ -1,5 +1,5 @@ -import { createOpencodeClient } from "@opencode-ai/sdk/v2/client" -import { base64Encode } from "@opencode-ai/util/encode" +import { createOpencodeClient } from "@opencoder-ai/sdk/v2/client" +import { base64Encode } from "@opencoder-ai/util/encode" export const serverHost = process.env.PLAYWRIGHT_SERVER_HOST ?? "localhost" export const serverPort = process.env.PLAYWRIGHT_SERVER_PORT ?? "4096" diff --git a/packages/app/package.json b/packages/app/package.json index 49ce671b60f9..b21682f27679 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,6 +1,6 @@ { - "name": "@opencode-ai/app", - "version": "1.1.65", + "name": "@opencoder-ai/app", + "version": "1.1.63", "description": "", "type": "module", "exports": { @@ -39,9 +39,9 @@ }, "dependencies": { "@kobalte/core": "catalog:", - "@opencode-ai/sdk": "workspace:*", - "@opencode-ai/ui": "workspace:*", - "@opencode-ai/util": "workspace:*", + "@opencoder-ai/sdk": "workspace:*", + "@opencoder-ai/ui": "workspace:*", + "@opencoder-ai/util": "workspace:*", "@shikijs/transformers": "3.9.2", "@solid-primitives/active-element": "2.1.3", "@solid-primitives/audio": "1.4.2", diff --git a/packages/app/src/app.tsx b/packages/app/src/app.tsx index 3032a795f8cd..2b34e6b749f9 100644 --- a/packages/app/src/app.tsx +++ b/packages/app/src/app.tsx @@ -2,14 +2,14 @@ import "@/index.css" import { ErrorBoundary, Suspense, lazy, type JSX, type ParentProps } from "solid-js" import { Router, Route, Navigate } from "@solidjs/router" import { MetaProvider } from "@solidjs/meta" -import { Font } from "@opencode-ai/ui/font" -import { MarkedProvider } from "@opencode-ai/ui/context/marked" -import { DiffComponentProvider } from "@opencode-ai/ui/context/diff" -import { CodeComponentProvider } from "@opencode-ai/ui/context/code" -import { I18nProvider } from "@opencode-ai/ui/context" -import { Diff } from "@opencode-ai/ui/diff" -import { Code } from "@opencode-ai/ui/code" -import { ThemeProvider } from "@opencode-ai/ui/theme" +import { Font } from "@opencoder-ai/ui/font" +import { MarkedProvider } from "@opencoder-ai/ui/context/marked" +import { DiffComponentProvider } from "@opencoder-ai/ui/context/diff" +import { CodeComponentProvider } from "@opencoder-ai/ui/context/code" +import { I18nProvider } from "@opencoder-ai/ui/context" +import { Diff } from "@opencoder-ai/ui/diff" +import { Code } from "@opencoder-ai/ui/code" +import { ThemeProvider } from "@opencoder-ai/ui/theme" import { GlobalSyncProvider } from "@/context/global-sync" import { PermissionProvider } from "@/context/permission" import { LayoutProvider } from "@/context/layout" @@ -22,7 +22,7 @@ import { FileProvider } from "@/context/file" import { CommentsProvider } from "@/context/comments" import { NotificationProvider } from "@/context/notification" import { ModelsProvider } from "@/context/models" -import { DialogProvider } from "@opencode-ai/ui/context/dialog" +import { DialogProvider } from "@opencoder-ai/ui/context/dialog" import { CommandProvider } from "@/context/command" import { LanguageProvider, useLanguage } from "@/context/language" import { usePlatform } from "@/context/platform" diff --git a/packages/app/src/components/dialog-connect-provider.tsx b/packages/app/src/components/dialog-connect-provider.tsx index 90f4f41f7c6f..829f37515546 100644 --- a/packages/app/src/components/dialog-connect-provider.tsx +++ b/packages/app/src/components/dialog-connect-provider.tsx @@ -1,15 +1,15 @@ -import type { ProviderAuthAuthorization } from "@opencode-ai/sdk/v2/client" -import { Button } from "@opencode-ai/ui/button" -import { useDialog } from "@opencode-ai/ui/context/dialog" -import { Dialog } from "@opencode-ai/ui/dialog" -import { Icon } from "@opencode-ai/ui/icon" -import { IconButton } from "@opencode-ai/ui/icon-button" -import type { IconName } from "@opencode-ai/ui/icons/provider" -import { List, type ListRef } from "@opencode-ai/ui/list" -import { ProviderIcon } from "@opencode-ai/ui/provider-icon" -import { Spinner } from "@opencode-ai/ui/spinner" -import { TextField } from "@opencode-ai/ui/text-field" -import { showToast } from "@opencode-ai/ui/toast" +import type { ProviderAuthAuthorization } from "@opencoder-ai/sdk/v2/client" +import { Button } from "@opencoder-ai/ui/button" +import { useDialog } from "@opencoder-ai/ui/context/dialog" +import { Dialog } from "@opencoder-ai/ui/dialog" +import { Icon } from "@opencoder-ai/ui/icon" +import { IconButton } from "@opencoder-ai/ui/icon-button" +import type { IconName } from "@opencoder-ai/ui/icons/provider" +import { List, type ListRef } from "@opencoder-ai/ui/list" +import { ProviderIcon } from "@opencoder-ai/ui/provider-icon" +import { Spinner } from "@opencoder-ai/ui/spinner" +import { TextField } from "@opencoder-ai/ui/text-field" +import { showToast } from "@opencoder-ai/ui/toast" import { createMemo, Match, onCleanup, onMount, Switch } from "solid-js" import { createStore, produce } from "solid-js/store" import { Link } from "@/components/link" diff --git a/packages/app/src/components/dialog-custom-provider.tsx b/packages/app/src/components/dialog-custom-provider.tsx index 017b85a2c997..c0ff92d97288 100644 --- a/packages/app/src/components/dialog-custom-provider.tsx +++ b/packages/app/src/components/dialog-custom-provider.tsx @@ -1,10 +1,10 @@ -import { Button } from "@opencode-ai/ui/button" -import { useDialog } from "@opencode-ai/ui/context/dialog" -import { Dialog } from "@opencode-ai/ui/dialog" -import { IconButton } from "@opencode-ai/ui/icon-button" -import { ProviderIcon } from "@opencode-ai/ui/provider-icon" -import { TextField } from "@opencode-ai/ui/text-field" -import { showToast } from "@opencode-ai/ui/toast" +import { Button } from "@opencoder-ai/ui/button" +import { useDialog } from "@opencoder-ai/ui/context/dialog" +import { Dialog } from "@opencoder-ai/ui/dialog" +import { IconButton } from "@opencoder-ai/ui/icon-button" +import { ProviderIcon } from "@opencoder-ai/ui/provider-icon" +import { TextField } from "@opencoder-ai/ui/text-field" +import { showToast } from "@opencoder-ai/ui/toast" import { For } from "solid-js" import { createStore } from "solid-js/store" import { Link } from "@/components/link" diff --git a/packages/app/src/components/dialog-edit-project.tsx b/packages/app/src/components/dialog-edit-project.tsx index ec0793c540ee..037dd76afc81 100644 --- a/packages/app/src/components/dialog-edit-project.tsx +++ b/packages/app/src/components/dialog-edit-project.tsx @@ -1,15 +1,15 @@ -import { Button } from "@opencode-ai/ui/button" -import { useDialog } from "@opencode-ai/ui/context/dialog" -import { Dialog } from "@opencode-ai/ui/dialog" -import { TextField } from "@opencode-ai/ui/text-field" -import { Icon } from "@opencode-ai/ui/icon" +import { Button } from "@opencoder-ai/ui/button" +import { useDialog } from "@opencoder-ai/ui/context/dialog" +import { Dialog } from "@opencoder-ai/ui/dialog" +import { TextField } from "@opencoder-ai/ui/text-field" +import { Icon } from "@opencoder-ai/ui/icon" import { createMemo, For, Show } from "solid-js" import { createStore } from "solid-js/store" import { useGlobalSDK } from "@/context/global-sdk" import { useGlobalSync } from "@/context/global-sync" import { type LocalProject, getAvatarColors } from "@/context/layout" -import { getFilename } from "@opencode-ai/util/path" -import { Avatar } from "@opencode-ai/ui/avatar" +import { getFilename } from "@opencoder-ai/util/path" +import { Avatar } from "@opencoder-ai/ui/avatar" import { useLanguage } from "@/context/language" const AVATAR_COLOR_KEYS = ["pink", "mint", "orange", "purple", "cyan", "lime"] as const diff --git a/packages/app/src/components/dialog-fork.tsx b/packages/app/src/components/dialog-fork.tsx index 8810955cc655..ed3bab026330 100644 --- a/packages/app/src/components/dialog-fork.tsx +++ b/packages/app/src/components/dialog-fork.tsx @@ -3,13 +3,13 @@ import { useNavigate, useParams } from "@solidjs/router" import { useSync } from "@/context/sync" import { useSDK } from "@/context/sdk" import { usePrompt } from "@/context/prompt" -import { useDialog } from "@opencode-ai/ui/context/dialog" -import { Dialog } from "@opencode-ai/ui/dialog" -import { List } from "@opencode-ai/ui/list" -import { showToast } from "@opencode-ai/ui/toast" +import { useDialog } from "@opencoder-ai/ui/context/dialog" +import { Dialog } from "@opencoder-ai/ui/dialog" +import { List } from "@opencoder-ai/ui/list" +import { showToast } from "@opencoder-ai/ui/toast" import { extractPromptFromParts } from "@/utils/prompt" -import type { TextPart as SDKTextPart } from "@opencode-ai/sdk/v2/client" -import { base64Encode } from "@opencode-ai/util/encode" +import type { TextPart as SDKTextPart } from "@opencoder-ai/sdk/v2/client" +import { base64Encode } from "@opencoder-ai/util/encode" import { useLanguage } from "@/context/language" interface ForkableMessage { diff --git a/packages/app/src/components/dialog-manage-models.tsx b/packages/app/src/components/dialog-manage-models.tsx index ace79e38a7c0..5dcf03a51469 100644 --- a/packages/app/src/components/dialog-manage-models.tsx +++ b/packages/app/src/components/dialog-manage-models.tsx @@ -1,13 +1,13 @@ -import { Dialog } from "@opencode-ai/ui/dialog" -import { List } from "@opencode-ai/ui/list" -import { Switch } from "@opencode-ai/ui/switch" -import { Tooltip } from "@opencode-ai/ui/tooltip" -import { Button } from "@opencode-ai/ui/button" +import { Dialog } from "@opencoder-ai/ui/dialog" +import { List } from "@opencoder-ai/ui/list" +import { Switch } from "@opencoder-ai/ui/switch" +import { Tooltip } from "@opencoder-ai/ui/tooltip" +import { Button } from "@opencoder-ai/ui/button" import type { Component } from "solid-js" import { useLocal } from "@/context/local" import { popularProviders } from "@/hooks/use-providers" import { useLanguage } from "@/context/language" -import { useDialog } from "@opencode-ai/ui/context/dialog" +import { useDialog } from "@opencoder-ai/ui/context/dialog" import { DialogSelectProvider } from "./dialog-select-provider" export const DialogManageModels: Component = () => { diff --git a/packages/app/src/components/dialog-release-notes.tsx b/packages/app/src/components/dialog-release-notes.tsx index 2040009a8c3c..b4aab674ad0d 100644 --- a/packages/app/src/components/dialog-release-notes.tsx +++ b/packages/app/src/components/dialog-release-notes.tsx @@ -1,7 +1,7 @@ import { createSignal } from "solid-js" -import { Dialog } from "@opencode-ai/ui/dialog" -import { Button } from "@opencode-ai/ui/button" -import { useDialog } from "@opencode-ai/ui/context/dialog" +import { Dialog } from "@opencoder-ai/ui/dialog" +import { Button } from "@opencoder-ai/ui/button" +import { useDialog } from "@opencoder-ai/ui/context/dialog" import { useSettings } from "@/context/settings" export type Highlight = { diff --git a/packages/app/src/components/dialog-select-directory.tsx b/packages/app/src/components/dialog-select-directory.tsx index 515e640c9fab..4a5ca6fe2299 100644 --- a/packages/app/src/components/dialog-select-directory.tsx +++ b/packages/app/src/components/dialog-select-directory.tsx @@ -1,9 +1,9 @@ -import { useDialog } from "@opencode-ai/ui/context/dialog" -import { Dialog } from "@opencode-ai/ui/dialog" -import { FileIcon } from "@opencode-ai/ui/file-icon" -import { List } from "@opencode-ai/ui/list" -import type { ListRef } from "@opencode-ai/ui/list" -import { getDirectory, getFilename } from "@opencode-ai/util/path" +import { useDialog } from "@opencoder-ai/ui/context/dialog" +import { Dialog } from "@opencoder-ai/ui/dialog" +import { FileIcon } from "@opencoder-ai/ui/file-icon" +import { List } from "@opencoder-ai/ui/list" +import type { ListRef } from "@opencoder-ai/ui/list" +import { getDirectory, getFilename } from "@opencoder-ai/util/path" import fuzzysort from "fuzzysort" import { createMemo, createResource, createSignal } from "solid-js" import { useGlobalSDK } from "@/context/global-sdk" diff --git a/packages/app/src/components/dialog-select-file.tsx b/packages/app/src/components/dialog-select-file.tsx index 29a3666c034b..f56c2cd79624 100644 --- a/packages/app/src/components/dialog-select-file.tsx +++ b/packages/app/src/components/dialog-select-file.tsx @@ -1,11 +1,11 @@ -import { useDialog } from "@opencode-ai/ui/context/dialog" -import { Dialog } from "@opencode-ai/ui/dialog" -import { FileIcon } from "@opencode-ai/ui/file-icon" -import { Icon } from "@opencode-ai/ui/icon" -import { Keybind } from "@opencode-ai/ui/keybind" -import { List } from "@opencode-ai/ui/list" -import { base64Encode } from "@opencode-ai/util/encode" -import { getDirectory, getFilename } from "@opencode-ai/util/path" +import { useDialog } from "@opencoder-ai/ui/context/dialog" +import { Dialog } from "@opencoder-ai/ui/dialog" +import { FileIcon } from "@opencoder-ai/ui/file-icon" +import { Icon } from "@opencoder-ai/ui/icon" +import { Keybind } from "@opencoder-ai/ui/keybind" +import { List } from "@opencoder-ai/ui/list" +import { base64Encode } from "@opencoder-ai/util/encode" +import { getDirectory, getFilename } from "@opencoder-ai/util/path" import { useNavigate, useParams } from "@solidjs/router" import { createMemo, createSignal, Match, onCleanup, Show, Switch } from "solid-js" import { formatKeybind, useCommand, type CommandOption } from "@/context/command" diff --git a/packages/app/src/components/dialog-select-mcp.tsx b/packages/app/src/components/dialog-select-mcp.tsx index f8913eee4fbc..4492fd8c22ac 100644 --- a/packages/app/src/components/dialog-select-mcp.tsx +++ b/packages/app/src/components/dialog-select-mcp.tsx @@ -1,9 +1,9 @@ import { Component, createMemo, createSignal, Show } from "solid-js" import { useSync } from "@/context/sync" import { useSDK } from "@/context/sdk" -import { Dialog } from "@opencode-ai/ui/dialog" -import { List } from "@opencode-ai/ui/list" -import { Switch } from "@opencode-ai/ui/switch" +import { Dialog } from "@opencoder-ai/ui/dialog" +import { List } from "@opencoder-ai/ui/list" +import { Switch } from "@opencoder-ai/ui/switch" import { useLanguage } from "@/context/language" const statusLabels = { diff --git a/packages/app/src/components/dialog-select-model-unpaid.tsx b/packages/app/src/components/dialog-select-model-unpaid.tsx index af788d05b03c..1edcffec02e5 100644 --- a/packages/app/src/components/dialog-select-model-unpaid.tsx +++ b/packages/app/src/components/dialog-select-model-unpaid.tsx @@ -1,11 +1,11 @@ -import { Button } from "@opencode-ai/ui/button" -import { useDialog } from "@opencode-ai/ui/context/dialog" -import { Dialog } from "@opencode-ai/ui/dialog" -import type { IconName } from "@opencode-ai/ui/icons/provider" -import { List, type ListRef } from "@opencode-ai/ui/list" -import { ProviderIcon } from "@opencode-ai/ui/provider-icon" -import { Tag } from "@opencode-ai/ui/tag" -import { Tooltip } from "@opencode-ai/ui/tooltip" +import { Button } from "@opencoder-ai/ui/button" +import { useDialog } from "@opencoder-ai/ui/context/dialog" +import { Dialog } from "@opencoder-ai/ui/dialog" +import type { IconName } from "@opencoder-ai/ui/icons/provider" +import { List, type ListRef } from "@opencoder-ai/ui/list" +import { ProviderIcon } from "@opencoder-ai/ui/provider-icon" +import { Tag } from "@opencoder-ai/ui/tag" +import { Tooltip } from "@opencoder-ai/ui/tooltip" import { type Component, Show } from "solid-js" import { useLocal } from "@/context/local" import { popularProviders, useProviders } from "@/hooks/use-providers" diff --git a/packages/app/src/components/dialog-select-model.tsx b/packages/app/src/components/dialog-select-model.tsx index a196db231a67..de2d04d23bf6 100644 --- a/packages/app/src/components/dialog-select-model.tsx +++ b/packages/app/src/components/dialog-select-model.tsx @@ -2,14 +2,14 @@ import { Popover as Kobalte } from "@kobalte/core/popover" import { Component, ComponentProps, createMemo, JSX, Show, ValidComponent } from "solid-js" import { createStore } from "solid-js/store" import { useLocal } from "@/context/local" -import { useDialog } from "@opencode-ai/ui/context/dialog" +import { useDialog } from "@opencoder-ai/ui/context/dialog" import { popularProviders } from "@/hooks/use-providers" -import { Button } from "@opencode-ai/ui/button" -import { IconButton } from "@opencode-ai/ui/icon-button" -import { Tag } from "@opencode-ai/ui/tag" -import { Dialog } from "@opencode-ai/ui/dialog" -import { List } from "@opencode-ai/ui/list" -import { Tooltip } from "@opencode-ai/ui/tooltip" +import { Button } from "@opencoder-ai/ui/button" +import { IconButton } from "@opencoder-ai/ui/icon-button" +import { Tag } from "@opencoder-ai/ui/tag" +import { Dialog } from "@opencoder-ai/ui/dialog" +import { List } from "@opencoder-ai/ui/list" +import { Tooltip } from "@opencoder-ai/ui/tooltip" import { DialogSelectProvider } from "./dialog-select-provider" import { DialogManageModels } from "./dialog-manage-models" import { ModelTooltip } from "./model-tooltip" diff --git a/packages/app/src/components/dialog-select-provider.tsx b/packages/app/src/components/dialog-select-provider.tsx index 8bbd3054b9a2..5dca2a342f92 100644 --- a/packages/app/src/components/dialog-select-provider.tsx +++ b/packages/app/src/components/dialog-select-provider.tsx @@ -1,11 +1,11 @@ import { Component, Show } from "solid-js" -import { useDialog } from "@opencode-ai/ui/context/dialog" +import { useDialog } from "@opencoder-ai/ui/context/dialog" import { popularProviders, useProviders } from "@/hooks/use-providers" -import { Dialog } from "@opencode-ai/ui/dialog" -import { List } from "@opencode-ai/ui/list" -import { Tag } from "@opencode-ai/ui/tag" -import { ProviderIcon } from "@opencode-ai/ui/provider-icon" -import { iconNames, type IconName } from "@opencode-ai/ui/icons/provider" +import { Dialog } from "@opencoder-ai/ui/dialog" +import { List } from "@opencoder-ai/ui/list" +import { Tag } from "@opencoder-ai/ui/tag" +import { ProviderIcon } from "@opencoder-ai/ui/provider-icon" +import { iconNames, type IconName } from "@opencoder-ai/ui/icons/provider" import { DialogConnectProvider } from "./dialog-connect-provider" import { useLanguage } from "@/context/language" import { DialogCustomProvider } from "./dialog-custom-provider" diff --git a/packages/app/src/components/dialog-select-server.tsx b/packages/app/src/components/dialog-select-server.tsx index 4c37806365a2..2a9a2e28ae09 100644 --- a/packages/app/src/components/dialog-select-server.tsx +++ b/packages/app/src/components/dialog-select-server.tsx @@ -1,18 +1,18 @@ import { createResource, createEffect, createMemo, onCleanup, Show } from "solid-js" import { createStore, reconcile } from "solid-js/store" -import { useDialog } from "@opencode-ai/ui/context/dialog" -import { Dialog } from "@opencode-ai/ui/dialog" -import { List } from "@opencode-ai/ui/list" -import { Button } from "@opencode-ai/ui/button" -import { IconButton } from "@opencode-ai/ui/icon-button" -import { TextField } from "@opencode-ai/ui/text-field" +import { useDialog } from "@opencoder-ai/ui/context/dialog" +import { Dialog } from "@opencoder-ai/ui/dialog" +import { List } from "@opencoder-ai/ui/list" +import { Button } from "@opencoder-ai/ui/button" +import { IconButton } from "@opencoder-ai/ui/icon-button" +import { TextField } from "@opencoder-ai/ui/text-field" import { normalizeServerUrl, useServer } from "@/context/server" import { usePlatform } from "@/context/platform" import { useNavigate } from "@solidjs/router" import { useLanguage } from "@/context/language" -import { DropdownMenu } from "@opencode-ai/ui/dropdown-menu" +import { DropdownMenu } from "@opencoder-ai/ui/dropdown-menu" import { useGlobalSDK } from "@/context/global-sdk" -import { showToast } from "@opencode-ai/ui/toast" +import { showToast } from "@opencoder-ai/ui/toast" import { ServerRow } from "@/components/server/server-row" import { checkServerHealth, type ServerHealth } from "@/utils/server-health" diff --git a/packages/app/src/components/dialog-settings.tsx b/packages/app/src/components/dialog-settings.tsx index 83cea131f5db..97c80d70da94 100644 --- a/packages/app/src/components/dialog-settings.tsx +++ b/packages/app/src/components/dialog-settings.tsx @@ -1,7 +1,7 @@ import { Component } from "solid-js" -import { Dialog } from "@opencode-ai/ui/dialog" -import { Tabs } from "@opencode-ai/ui/tabs" -import { Icon } from "@opencode-ai/ui/icon" +import { Dialog } from "@opencoder-ai/ui/dialog" +import { Tabs } from "@opencoder-ai/ui/tabs" +import { Icon } from "@opencoder-ai/ui/icon" import { useLanguage } from "@/context/language" import { usePlatform } from "@/context/platform" import { SettingsGeneral } from "./settings-general" diff --git a/packages/app/src/components/prompt-input.tsx b/packages/app/src/components/prompt-input.tsx index 8e8c3c895b47..4986ea9edeeb 100644 --- a/packages/app/src/components/prompt-input.tsx +++ b/packages/app/src/components/prompt-input.tsx @@ -1,4 +1,4 @@ -import { useFilteredList } from "@opencode-ai/ui/hooks" +import { useFilteredList } from "@opencoder-ai/ui/hooks" import { createEffect, on, Component, Show, For, onCleanup, Switch, Match, createMemo, createSignal } from "solid-js" import { createStore } from "solid-js/store" import { createFocusSignal } from "@solid-primitives/active-element" @@ -19,14 +19,14 @@ import { useSDK } from "@/context/sdk" import { useParams } from "@solidjs/router" import { useSync } from "@/context/sync" import { useComments } from "@/context/comments" -import { Button } from "@opencode-ai/ui/button" -import { Icon } from "@opencode-ai/ui/icon" -import { ProviderIcon } from "@opencode-ai/ui/provider-icon" -import type { IconName } from "@opencode-ai/ui/icons/provider" -import { Tooltip, TooltipKeybind } from "@opencode-ai/ui/tooltip" -import { IconButton } from "@opencode-ai/ui/icon-button" -import { Select } from "@opencode-ai/ui/select" -import { useDialog } from "@opencode-ai/ui/context/dialog" +import { Button } from "@opencoder-ai/ui/button" +import { Icon } from "@opencoder-ai/ui/icon" +import { ProviderIcon } from "@opencoder-ai/ui/provider-icon" +import type { IconName } from "@opencoder-ai/ui/icons/provider" +import { Tooltip, TooltipKeybind } from "@opencoder-ai/ui/tooltip" +import { IconButton } from "@opencoder-ai/ui/icon-button" +import { Select } from "@opencoder-ai/ui/select" +import { useDialog } from "@opencoder-ai/ui/context/dialog" import { ModelSelectorPopover } from "@/components/dialog-select-model" import { DialogSelectModelUnpaid } from "@/components/dialog-select-model-unpaid" import { useProviders } from "@/hooks/use-providers" @@ -50,7 +50,7 @@ import { PromptContextItems } from "./prompt-input/context-items" import { PromptImageAttachments } from "./prompt-input/image-attachments" import { PromptDragOverlay } from "./prompt-input/drag-overlay" import { promptPlaceholder } from "./prompt-input/placeholder" -import { ImagePreview } from "@opencode-ai/ui/image-preview" +import { ImagePreview } from "@opencoder-ai/ui/image-preview" interface PromptInputProps { class?: string diff --git a/packages/app/src/components/session-context-usage.tsx b/packages/app/src/components/session-context-usage.tsx index c6e60d3edebd..03b4ea6d685b 100644 --- a/packages/app/src/components/session-context-usage.tsx +++ b/packages/app/src/components/session-context-usage.tsx @@ -1,7 +1,7 @@ import { Match, Show, Switch, createMemo } from "solid-js" -import { Tooltip } from "@opencode-ai/ui/tooltip" -import { ProgressCircle } from "@opencode-ai/ui/progress-circle" -import { Button } from "@opencode-ai/ui/button" +import { Tooltip } from "@opencoder-ai/ui/tooltip" +import { ProgressCircle } from "@opencoder-ai/ui/progress-circle" +import { Button } from "@opencoder-ai/ui/button" import { useParams } from "@solidjs/router" import { useLayout } from "@/context/layout" diff --git a/packages/app/src/components/session-lsp-indicator.tsx b/packages/app/src/components/session-lsp-indicator.tsx new file mode 100644 index 000000000000..49ba4a666370 --- /dev/null +++ b/packages/app/src/components/session-lsp-indicator.tsx @@ -0,0 +1,42 @@ +import { createMemo, Show } from "solid-js" +import { useSync } from "@/context/sync" +import { useLanguage } from "@/context/language" +import { Tooltip } from "@opencoder-ai/ui/tooltip" + +export function SessionLspIndicator() { + const sync = useSync() + const language = useLanguage() + + const lspStats = createMemo(() => { + const lsp = sync.data.lsp ?? [] + const connected = lsp.filter((s) => s.status === "connected").length + const hasError = lsp.some((s) => s.status === "error") + const total = lsp.length + return { connected, hasError, total } + }) + + const tooltipContent = createMemo(() => { + const lsp = sync.data.lsp ?? [] + if (lsp.length === 0) return language.t("lsp.tooltip.none") + return lsp.map((s) => s.name).join(", ") + }) + + return ( + 0}> + +
+
0, + }} + /> + + {language.t("lsp.label.connected", { count: lspStats().connected })} + +
+ + + ) +} diff --git a/packages/app/src/components/session-mcp-indicator.tsx b/packages/app/src/components/session-mcp-indicator.tsx new file mode 100644 index 000000000000..4ac0552b8a8b --- /dev/null +++ b/packages/app/src/components/session-mcp-indicator.tsx @@ -0,0 +1,34 @@ +import { createMemo, Show } from "solid-js" +import { Button } from "@opencoder-ai/ui/button" +import { useDialog } from "@opencoder-ai/ui/context/dialog" +import { useSync } from "@/context/sync" +import { DialogSelectMcp } from "@/components/dialog-select-mcp" + +export function SessionMcpIndicator() { + const sync = useSync() + const dialog = useDialog() + + const mcpStats = createMemo(() => { + const mcp = sync.data.mcp ?? {} + const entries = Object.entries(mcp) + const enabled = entries.filter(([, status]) => status.status === "connected").length + const failed = entries.some(([, status]) => status.status === "failed") + const total = entries.length + return { enabled, failed, total } + }) + + return ( + 0}> + + + ) +} diff --git a/packages/app/src/components/session/session-context-tab.tsx b/packages/app/src/components/session/session-context-tab.tsx index 81220b3adb2f..4fc47f60458c 100644 --- a/packages/app/src/components/session/session-context-tab.tsx +++ b/packages/app/src/components/session/session-context-tab.tsx @@ -3,14 +3,14 @@ import type { JSX } from "solid-js" import { useParams } from "@solidjs/router" import { useSync } from "@/context/sync" import { useLayout } from "@/context/layout" -import { checksum } from "@opencode-ai/util/encode" -import { findLast } from "@opencode-ai/util/array" -import { Icon } from "@opencode-ai/ui/icon" -import { Accordion } from "@opencode-ai/ui/accordion" -import { StickyAccordionHeader } from "@opencode-ai/ui/sticky-accordion-header" -import { Code } from "@opencode-ai/ui/code" -import { Markdown } from "@opencode-ai/ui/markdown" -import type { Message, Part, UserMessage } from "@opencode-ai/sdk/v2/client" +import { checksum } from "@opencoder-ai/util/encode" +import { findLast } from "@opencoder-ai/util/array" +import { Icon } from "@opencoder-ai/ui/icon" +import { Accordion } from "@opencoder-ai/ui/accordion" +import { StickyAccordionHeader } from "@opencoder-ai/ui/sticky-accordion-header" +import { Code } from "@opencoder-ai/ui/code" +import { Markdown } from "@opencoder-ai/ui/markdown" +import type { Message, Part, UserMessage } from "@opencoder-ai/sdk/v2/client" import { useLanguage } from "@/context/language" import { getSessionContextMetrics } from "./session-context-metrics" import { estimateSessionContextBreakdown, type SessionContextBreakdownKey } from "./session-context-breakdown" diff --git a/packages/app/src/components/session/session-header.tsx b/packages/app/src/components/session/session-header.tsx index b85b9a536a9d..f695a0533dc4 100644 --- a/packages/app/src/components/session/session-header.tsx +++ b/packages/app/src/components/session/session-header.tsx @@ -9,20 +9,20 @@ import { usePlatform } from "@/context/platform" import { useServer } from "@/context/server" import { useSync } from "@/context/sync" import { useGlobalSDK } from "@/context/global-sdk" -import { getFilename } from "@opencode-ai/util/path" +import { getFilename } from "@opencoder-ai/util/path" import { decode64 } from "@/utils/base64" import { Persist, persisted } from "@/utils/persist" -import { Icon } from "@opencode-ai/ui/icon" -import { IconButton } from "@opencode-ai/ui/icon-button" -import { Button } from "@opencode-ai/ui/button" -import { AppIcon } from "@opencode-ai/ui/app-icon" -import { DropdownMenu } from "@opencode-ai/ui/dropdown-menu" -import { Tooltip, TooltipKeybind } from "@opencode-ai/ui/tooltip" -import { Popover } from "@opencode-ai/ui/popover" -import { TextField } from "@opencode-ai/ui/text-field" -import { Keybind } from "@opencode-ai/ui/keybind" -import { showToast } from "@opencode-ai/ui/toast" +import { Icon } from "@opencoder-ai/ui/icon" +import { IconButton } from "@opencoder-ai/ui/icon-button" +import { Button } from "@opencoder-ai/ui/button" +import { AppIcon } from "@opencoder-ai/ui/app-icon" +import { DropdownMenu } from "@opencoder-ai/ui/dropdown-menu" +import { Tooltip, TooltipKeybind } from "@opencoder-ai/ui/tooltip" +import { Popover } from "@opencoder-ai/ui/popover" +import { TextField } from "@opencoder-ai/ui/text-field" +import { Keybind } from "@opencoder-ai/ui/keybind" +import { showToast } from "@opencoder-ai/ui/toast" import { StatusPopover } from "../status-popover" const OPEN_APPS = [ diff --git a/packages/app/src/components/session/session-new-view.tsx b/packages/app/src/components/session/session-new-view.tsx index ab96652d4499..a129f73d3539 100644 --- a/packages/app/src/components/session/session-new-view.tsx +++ b/packages/app/src/components/session/session-new-view.tsx @@ -3,8 +3,8 @@ import { DateTime } from "luxon" import { useSync } from "@/context/sync" import { useSDK } from "@/context/sdk" import { useLanguage } from "@/context/language" -import { Icon } from "@opencode-ai/ui/icon" -import { getDirectory, getFilename } from "@opencode-ai/util/path" +import { Icon } from "@opencoder-ai/ui/icon" +import { getDirectory, getFilename } from "@opencoder-ai/util/path" const MAIN_WORKTREE = "main" const CREATE_WORKTREE = "create" diff --git a/packages/app/src/components/session/session-sortable-tab.tsx b/packages/app/src/components/session/session-sortable-tab.tsx index b94e7a8e96cf..d06e33043107 100644 --- a/packages/app/src/components/session/session-sortable-tab.tsx +++ b/packages/app/src/components/session/session-sortable-tab.tsx @@ -1,11 +1,11 @@ import { createMemo, Show } from "solid-js" import type { JSX } from "solid-js" import { createSortable } from "@thisbeyond/solid-dnd" -import { FileIcon } from "@opencode-ai/ui/file-icon" -import { IconButton } from "@opencode-ai/ui/icon-button" -import { TooltipKeybind } from "@opencode-ai/ui/tooltip" -import { Tabs } from "@opencode-ai/ui/tabs" -import { getFilename } from "@opencode-ai/util/path" +import { FileIcon } from "@opencoder-ai/ui/file-icon" +import { IconButton } from "@opencoder-ai/ui/icon-button" +import { TooltipKeybind } from "@opencoder-ai/ui/tooltip" +import { Tabs } from "@opencoder-ai/ui/tabs" +import { getFilename } from "@opencoder-ai/util/path" import { useFile } from "@/context/file" import { useLanguage } from "@/context/language" import { useCommand } from "@/context/command" diff --git a/packages/app/src/components/session/session-sortable-terminal-tab.tsx b/packages/app/src/components/session/session-sortable-terminal-tab.tsx index 6fe6186d5102..5604480e1047 100644 --- a/packages/app/src/components/session/session-sortable-terminal-tab.tsx +++ b/packages/app/src/components/session/session-sortable-terminal-tab.tsx @@ -2,10 +2,10 @@ import type { JSX } from "solid-js" import { Show, createEffect, onCleanup } from "solid-js" import { createStore } from "solid-js/store" import { createSortable } from "@thisbeyond/solid-dnd" -import { IconButton } from "@opencode-ai/ui/icon-button" -import { Tabs } from "@opencode-ai/ui/tabs" -import { DropdownMenu } from "@opencode-ai/ui/dropdown-menu" -import { Icon } from "@opencode-ai/ui/icon" +import { IconButton } from "@opencoder-ai/ui/icon-button" +import { Tabs } from "@opencoder-ai/ui/tabs" +import { DropdownMenu } from "@opencoder-ai/ui/dropdown-menu" +import { Icon } from "@opencoder-ai/ui/icon" import { useTerminal, type LocalPTY } from "@/context/terminal" import { useLanguage } from "@/context/language" diff --git a/packages/app/src/components/settings-general.tsx b/packages/app/src/components/settings-general.tsx index 439f542bb1cb..42d8c2075a3b 100644 --- a/packages/app/src/components/settings-general.tsx +++ b/packages/app/src/components/settings-general.tsx @@ -1,12 +1,12 @@ import { Component, Show, createMemo, createResource, type JSX } from "solid-js" import { createStore } from "solid-js/store" -import { Button } from "@opencode-ai/ui/button" -import { Icon } from "@opencode-ai/ui/icon" -import { Select } from "@opencode-ai/ui/select" -import { Switch } from "@opencode-ai/ui/switch" -import { Tooltip } from "@opencode-ai/ui/tooltip" -import { useTheme, type ColorScheme } from "@opencode-ai/ui/theme" -import { showToast } from "@opencode-ai/ui/toast" +import { Button } from "@opencoder-ai/ui/button" +import { Icon } from "@opencoder-ai/ui/icon" +import { Select } from "@opencoder-ai/ui/select" +import { Switch } from "@opencoder-ai/ui/switch" +import { Tooltip } from "@opencoder-ai/ui/tooltip" +import { useTheme, type ColorScheme } from "@opencoder-ai/ui/theme" +import { showToast } from "@opencoder-ai/ui/toast" import { useLanguage } from "@/context/language" import { usePlatform } from "@/context/platform" import { useSettings, monoFontFamily } from "@/context/settings" diff --git a/packages/app/src/components/settings-keybinds.tsx b/packages/app/src/components/settings-keybinds.tsx index bcc731af99fb..27f5bfc6400b 100644 --- a/packages/app/src/components/settings-keybinds.tsx +++ b/packages/app/src/components/settings-keybinds.tsx @@ -1,10 +1,10 @@ import { Component, For, Show, createMemo, onCleanup, onMount } from "solid-js" import { createStore } from "solid-js/store" -import { Button } from "@opencode-ai/ui/button" -import { Icon } from "@opencode-ai/ui/icon" -import { IconButton } from "@opencode-ai/ui/icon-button" -import { TextField } from "@opencode-ai/ui/text-field" -import { showToast } from "@opencode-ai/ui/toast" +import { Button } from "@opencoder-ai/ui/button" +import { Icon } from "@opencoder-ai/ui/icon" +import { IconButton } from "@opencoder-ai/ui/icon-button" +import { TextField } from "@opencoder-ai/ui/text-field" +import { showToast } from "@opencoder-ai/ui/toast" import fuzzysort from "fuzzysort" import { formatKeybind, parseKeybind, useCommand } from "@/context/command" import { useLanguage } from "@/context/language" diff --git a/packages/app/src/components/settings-models.tsx b/packages/app/src/components/settings-models.tsx index 3a0b7a4fb1b3..fd58a1779607 100644 --- a/packages/app/src/components/settings-models.tsx +++ b/packages/app/src/components/settings-models.tsx @@ -1,10 +1,10 @@ -import { useFilteredList } from "@opencode-ai/ui/hooks" -import { ProviderIcon } from "@opencode-ai/ui/provider-icon" -import { Switch } from "@opencode-ai/ui/switch" -import { Icon } from "@opencode-ai/ui/icon" -import { IconButton } from "@opencode-ai/ui/icon-button" -import { TextField } from "@opencode-ai/ui/text-field" -import type { IconName } from "@opencode-ai/ui/icons/provider" +import { useFilteredList } from "@opencoder-ai/ui/hooks" +import { ProviderIcon } from "@opencoder-ai/ui/provider-icon" +import { Switch } from "@opencoder-ai/ui/switch" +import { Icon } from "@opencoder-ai/ui/icon" +import { IconButton } from "@opencoder-ai/ui/icon-button" +import { TextField } from "@opencoder-ai/ui/text-field" +import type { IconName } from "@opencoder-ai/ui/icons/provider" import { type Component, For, Show } from "solid-js" import { useLanguage } from "@/context/language" import { useModels } from "@/context/models" diff --git a/packages/app/src/components/settings-permissions.tsx b/packages/app/src/components/settings-permissions.tsx index 348854491ab2..4121bae07b99 100644 --- a/packages/app/src/components/settings-permissions.tsx +++ b/packages/app/src/components/settings-permissions.tsx @@ -1,5 +1,5 @@ -import { Select } from "@opencode-ai/ui/select" -import { showToast } from "@opencode-ai/ui/toast" +import { Select } from "@opencoder-ai/ui/select" +import { showToast } from "@opencoder-ai/ui/toast" import { Component, For, createMemo, type JSX } from "solid-js" import { useGlobalSync } from "@/context/global-sync" import { useLanguage } from "@/context/language" diff --git a/packages/app/src/components/settings-providers.tsx b/packages/app/src/components/settings-providers.tsx index a3375c9c608b..efe17c91f7ff 100644 --- a/packages/app/src/components/settings-providers.tsx +++ b/packages/app/src/components/settings-providers.tsx @@ -1,9 +1,9 @@ -import { Button } from "@opencode-ai/ui/button" -import { useDialog } from "@opencode-ai/ui/context/dialog" -import { ProviderIcon } from "@opencode-ai/ui/provider-icon" -import { Tag } from "@opencode-ai/ui/tag" -import { showToast } from "@opencode-ai/ui/toast" -import { iconNames, type IconName } from "@opencode-ai/ui/icons/provider" +import { Button } from "@opencoder-ai/ui/button" +import { useDialog } from "@opencoder-ai/ui/context/dialog" +import { ProviderIcon } from "@opencoder-ai/ui/provider-icon" +import { Tag } from "@opencoder-ai/ui/tag" +import { showToast } from "@opencoder-ai/ui/toast" +import { iconNames, type IconName } from "@opencoder-ai/ui/icons/provider" import { popularProviders, useProviders } from "@/hooks/use-providers" import { createMemo, type Component, For, Show } from "solid-js" import { useLanguage } from "@/context/language" diff --git a/packages/app/src/components/status-popover.tsx b/packages/app/src/components/status-popover.tsx index 38152b82314c..de9eb8002a44 100644 --- a/packages/app/src/components/status-popover.tsx +++ b/packages/app/src/components/status-popover.tsx @@ -1,13 +1,13 @@ import { createEffect, createMemo, createSignal, For, onCleanup, Show, type Accessor, type JSXElement } from "solid-js" import { createStore, reconcile } from "solid-js/store" import { useNavigate } from "@solidjs/router" -import { useDialog } from "@opencode-ai/ui/context/dialog" -import { Popover } from "@opencode-ai/ui/popover" -import { Tabs } from "@opencode-ai/ui/tabs" -import { Button } from "@opencode-ai/ui/button" -import { Switch } from "@opencode-ai/ui/switch" -import { Icon } from "@opencode-ai/ui/icon" -import { showToast } from "@opencode-ai/ui/toast" +import { useDialog } from "@opencoder-ai/ui/context/dialog" +import { Popover } from "@opencoder-ai/ui/popover" +import { Tabs } from "@opencoder-ai/ui/tabs" +import { Button } from "@opencoder-ai/ui/button" +import { Switch } from "@opencoder-ai/ui/switch" +import { Icon } from "@opencoder-ai/ui/icon" +import { showToast } from "@opencoder-ai/ui/toast" import { useSync } from "@/context/sync" import { useSDK } from "@/context/sdk" import { normalizeServerUrl, useServer } from "@/context/server" diff --git a/packages/app/src/components/terminal.tsx b/packages/app/src/components/terminal.tsx index ccf7012d20ab..fc9c9fdcee83 100644 --- a/packages/app/src/components/terminal.tsx +++ b/packages/app/src/components/terminal.tsx @@ -6,9 +6,9 @@ import { monoFontFamily, useSettings } from "@/context/settings" import { parseKeybind, matchKeybind } from "@/context/command" import { SerializeAddon } from "@/addons/serialize" import { LocalPTY } from "@/context/terminal" -import { resolveThemeVariant, useTheme, withAlpha, type HexColor } from "@opencode-ai/ui/theme" +import { resolveThemeVariant, useTheme, withAlpha, type HexColor } from "@opencoder-ai/ui/theme" import { useLanguage } from "@/context/language" -import { showToast } from "@opencode-ai/ui/toast" +import { showToast } from "@opencoder-ai/ui/toast" import { disposeIfDisposable, getHoveredLinkText, setOptionIfSupported } from "@/utils/runtime-adapters" import { terminalWriter } from "@/utils/terminal-writer" diff --git a/packages/app/src/components/titlebar.tsx b/packages/app/src/components/titlebar.tsx index 039a25faee80..7c873da0e78d 100644 --- a/packages/app/src/components/titlebar.tsx +++ b/packages/app/src/components/titlebar.tsx @@ -1,11 +1,11 @@ import { createEffect, createMemo, Show, untrack } from "solid-js" import { createStore } from "solid-js/store" import { useLocation, useNavigate } from "@solidjs/router" -import { IconButton } from "@opencode-ai/ui/icon-button" -import { Icon } from "@opencode-ai/ui/icon" -import { Button } from "@opencode-ai/ui/button" -import { Tooltip, TooltipKeybind } from "@opencode-ai/ui/tooltip" -import { useTheme } from "@opencode-ai/ui/theme" +import { IconButton } from "@opencoder-ai/ui/icon-button" +import { Icon } from "@opencoder-ai/ui/icon" +import { Button } from "@opencoder-ai/ui/button" +import { Tooltip, TooltipKeybind } from "@opencoder-ai/ui/tooltip" +import { useTheme } from "@opencoder-ai/ui/theme" import { useLayout } from "@/context/layout" import { usePlatform } from "@/context/platform" diff --git a/packages/app/src/context/command.tsx b/packages/app/src/context/command.tsx index 237d7188467a..02993d7991ac 100644 --- a/packages/app/src/context/command.tsx +++ b/packages/app/src/context/command.tsx @@ -1,7 +1,7 @@ import { createEffect, createMemo, onCleanup, onMount, type Accessor } from "solid-js" import { createStore } from "solid-js/store" -import { createSimpleContext } from "@opencode-ai/ui/context" -import { useDialog } from "@opencode-ai/ui/context/dialog" +import { createSimpleContext } from "@opencoder-ai/ui/context" +import { useDialog } from "@opencoder-ai/ui/context/dialog" import { useLanguage } from "@/context/language" import { useSettings } from "@/context/settings" import { Persist, persisted } from "@/utils/persist" diff --git a/packages/app/src/context/comments.tsx b/packages/app/src/context/comments.tsx index ecf63e45b648..c952a993a9a8 100644 --- a/packages/app/src/context/comments.tsx +++ b/packages/app/src/context/comments.tsx @@ -1,6 +1,6 @@ import { batch, createMemo, createRoot, onCleanup } from "solid-js" import { createStore, reconcile, type SetStoreFunction, type Store } from "solid-js/store" -import { createSimpleContext } from "@opencode-ai/ui/context" +import { createSimpleContext } from "@opencoder-ai/ui/context" import { useParams } from "@solidjs/router" import { Persist, persisted } from "@/utils/persist" import { createScopedCache } from "@/utils/scoped-cache" diff --git a/packages/app/src/context/file.tsx b/packages/app/src/context/file.tsx index 99c6d2e4219d..d92803a3f6fe 100644 --- a/packages/app/src/context/file.tsx +++ b/packages/app/src/context/file.tsx @@ -1,9 +1,9 @@ import { batch, createEffect, createMemo, onCleanup } from "solid-js" import { createStore, produce, reconcile } from "solid-js/store" -import { createSimpleContext } from "@opencode-ai/ui/context" -import { showToast } from "@opencode-ai/ui/toast" +import { createSimpleContext } from "@opencoder-ai/ui/context" +import { showToast } from "@opencoder-ai/ui/toast" import { useParams } from "@solidjs/router" -import { getFilename } from "@opencode-ai/util/path" +import { getFilename } from "@opencoder-ai/util/path" import { useSDK } from "./sdk" import { useSync } from "./sync" import { useLanguage } from "@/context/language" diff --git a/packages/app/src/context/global-sdk.tsx b/packages/app/src/context/global-sdk.tsx index 3f93b76a723c..39c5a26ad611 100644 --- a/packages/app/src/context/global-sdk.tsx +++ b/packages/app/src/context/global-sdk.tsx @@ -1,5 +1,5 @@ -import { createOpencodeClient, type Event } from "@opencode-ai/sdk/v2/client" -import { createSimpleContext } from "@opencode-ai/ui/context" +import { createOpencodeClient, type Event } from "@opencoder-ai/sdk/v2/client" +import { createSimpleContext } from "@opencoder-ai/ui/context" import { createGlobalEmitter } from "@solid-primitives/event-bus" import { batch, onCleanup } from "solid-js" import { usePlatform } from "./platform" diff --git a/packages/app/src/context/global-sync.tsx b/packages/app/src/context/global-sync.tsx index 62c7eb66ec9c..d47fd550a3b8 100644 --- a/packages/app/src/context/global-sync.tsx +++ b/packages/app/src/context/global-sync.tsx @@ -5,7 +5,7 @@ import { type ProviderAuthResponse, type ProviderListResponse, createOpencodeClient, -} from "@opencode-ai/sdk/v2/client" +} from "@opencoder-ai/sdk/v2/client" import { createStore, produce, reconcile } from "solid-js/store" import { useGlobalSDK } from "./global-sdk" import type { InitError } from "../pages/error" @@ -21,8 +21,8 @@ import { Switch, Match, } from "solid-js" -import { showToast } from "@opencode-ai/ui/toast" -import { getFilename } from "@opencode-ai/util/path" +import { showToast } from "@opencoder-ai/ui/toast" +import { getFilename } from "@opencoder-ai/util/path" import { usePlatform } from "./platform" import { useLanguage } from "@/context/language" import { Persist, persisted } from "@/utils/persist" diff --git a/packages/app/src/context/highlights.tsx b/packages/app/src/context/highlights.tsx index 476209e41732..c6d9169391b0 100644 --- a/packages/app/src/context/highlights.tsx +++ b/packages/app/src/context/highlights.tsx @@ -1,7 +1,7 @@ import { createEffect, createSignal, onCleanup } from "solid-js" import { createStore } from "solid-js/store" -import { createSimpleContext } from "@opencode-ai/ui/context" -import { useDialog } from "@opencode-ai/ui/context/dialog" +import { createSimpleContext } from "@opencoder-ai/ui/context" +import { useDialog } from "@opencoder-ai/ui/context/dialog" import { usePlatform } from "@/context/platform" import { useSettings } from "@/context/settings" import { persisted } from "@/utils/persist" diff --git a/packages/app/src/context/language.tsx b/packages/app/src/context/language.tsx index a5d894e62eba..b14c486e640d 100644 --- a/packages/app/src/context/language.tsx +++ b/packages/app/src/context/language.tsx @@ -1,7 +1,7 @@ import * as i18n from "@solid-primitives/i18n" import { createEffect, createMemo } from "solid-js" import { createStore } from "solid-js/store" -import { createSimpleContext } from "@opencode-ai/ui/context" +import { createSimpleContext } from "@opencoder-ai/ui/context" import { Persist, persisted } from "@/utils/persist" import { dict as en } from "@/i18n/en" import { dict as zh } from "@/i18n/zh" @@ -19,22 +19,22 @@ import { dict as no } from "@/i18n/no" import { dict as br } from "@/i18n/br" import { dict as th } from "@/i18n/th" import { dict as bs } from "@/i18n/bs" -import { dict as uiEn } from "@opencode-ai/ui/i18n/en" -import { dict as uiZh } from "@opencode-ai/ui/i18n/zh" -import { dict as uiZht } from "@opencode-ai/ui/i18n/zht" -import { dict as uiKo } from "@opencode-ai/ui/i18n/ko" -import { dict as uiDe } from "@opencode-ai/ui/i18n/de" -import { dict as uiEs } from "@opencode-ai/ui/i18n/es" -import { dict as uiFr } from "@opencode-ai/ui/i18n/fr" -import { dict as uiDa } from "@opencode-ai/ui/i18n/da" -import { dict as uiJa } from "@opencode-ai/ui/i18n/ja" -import { dict as uiPl } from "@opencode-ai/ui/i18n/pl" -import { dict as uiRu } from "@opencode-ai/ui/i18n/ru" -import { dict as uiAr } from "@opencode-ai/ui/i18n/ar" -import { dict as uiNo } from "@opencode-ai/ui/i18n/no" -import { dict as uiBr } from "@opencode-ai/ui/i18n/br" -import { dict as uiTh } from "@opencode-ai/ui/i18n/th" -import { dict as uiBs } from "@opencode-ai/ui/i18n/bs" +import { dict as uiEn } from "@opencoder-ai/ui/i18n/en" +import { dict as uiZh } from "@opencoder-ai/ui/i18n/zh" +import { dict as uiZht } from "@opencoder-ai/ui/i18n/zht" +import { dict as uiKo } from "@opencoder-ai/ui/i18n/ko" +import { dict as uiDe } from "@opencoder-ai/ui/i18n/de" +import { dict as uiEs } from "@opencoder-ai/ui/i18n/es" +import { dict as uiFr } from "@opencoder-ai/ui/i18n/fr" +import { dict as uiDa } from "@opencoder-ai/ui/i18n/da" +import { dict as uiJa } from "@opencoder-ai/ui/i18n/ja" +import { dict as uiPl } from "@opencoder-ai/ui/i18n/pl" +import { dict as uiRu } from "@opencoder-ai/ui/i18n/ru" +import { dict as uiAr } from "@opencoder-ai/ui/i18n/ar" +import { dict as uiNo } from "@opencoder-ai/ui/i18n/no" +import { dict as uiBr } from "@opencoder-ai/ui/i18n/br" +import { dict as uiTh } from "@opencoder-ai/ui/i18n/th" +import { dict as uiBs } from "@opencoder-ai/ui/i18n/bs" export type Locale = | "en" diff --git a/packages/app/src/context/layout.tsx b/packages/app/src/context/layout.tsx index 71f0294e7e6c..dff5908378fd 100644 --- a/packages/app/src/context/layout.tsx +++ b/packages/app/src/context/layout.tsx @@ -1,11 +1,11 @@ import { createStore, produce } from "solid-js/store" import { batch, createEffect, createMemo, onCleanup, onMount, type Accessor } from "solid-js" -import { createSimpleContext } from "@opencode-ai/ui/context" +import { createSimpleContext } from "@opencoder-ai/ui/context" import { useGlobalSync } from "./global-sync" import { useGlobalSDK } from "./global-sdk" import { useServer } from "./server" import { usePlatform } from "./platform" -import { Project } from "@opencode-ai/sdk/v2" +import { Project } from "@opencoder-ai/sdk/v2" import { Persist, persisted, removePersisted } from "@/utils/persist" import { same } from "@/utils/same" import { createScrollPersistence, type SessionScroll } from "./layout-scroll" diff --git a/packages/app/src/context/local.tsx b/packages/app/src/context/local.tsx index ac5da60e8629..28606f655e8f 100644 --- a/packages/app/src/context/local.tsx +++ b/packages/app/src/context/local.tsx @@ -1,9 +1,9 @@ import { createStore } from "solid-js/store" import { batch, createMemo } from "solid-js" -import { createSimpleContext } from "@opencode-ai/ui/context" +import { createSimpleContext } from "@opencoder-ai/ui/context" import { useSDK } from "./sdk" import { useSync } from "./sync" -import { base64Encode } from "@opencode-ai/util/encode" +import { base64Encode } from "@opencoder-ai/util/encode" import { useProviders } from "@/hooks/use-providers" import { useModels } from "@/context/models" import { cycleModelVariant, getConfiguredAgentVariant, resolveModelVariant } from "./model-variant" diff --git a/packages/app/src/context/models.tsx b/packages/app/src/context/models.tsx index 12ec8371add1..6843d8d10677 100644 --- a/packages/app/src/context/models.tsx +++ b/packages/app/src/context/models.tsx @@ -2,7 +2,7 @@ import { createMemo } from "solid-js" import { createStore } from "solid-js/store" import { DateTime } from "luxon" import { filter, firstBy, flat, groupBy, mapValues, pipe, uniqueBy, values } from "remeda" -import { createSimpleContext } from "@opencode-ai/ui/context" +import { createSimpleContext } from "@opencoder-ai/ui/context" import { useProviders } from "@/hooks/use-providers" import { Persist, persisted } from "@/utils/persist" diff --git a/packages/app/src/context/notification.tsx b/packages/app/src/context/notification.tsx index 04bc2fdaaaf3..e044fa48ddb1 100644 --- a/packages/app/src/context/notification.tsx +++ b/packages/app/src/context/notification.tsx @@ -1,16 +1,16 @@ import { createStore, reconcile } from "solid-js/store" import { batch, createEffect, createMemo, onCleanup } from "solid-js" import { useParams } from "@solidjs/router" -import { createSimpleContext } from "@opencode-ai/ui/context" +import { createSimpleContext } from "@opencoder-ai/ui/context" import { useGlobalSDK } from "./global-sdk" import { useGlobalSync } from "./global-sync" import { usePlatform } from "@/context/platform" import { useLanguage } from "@/context/language" import { useSettings } from "@/context/settings" -import { Binary } from "@opencode-ai/util/binary" -import { base64Encode } from "@opencode-ai/util/encode" +import { Binary } from "@opencoder-ai/util/binary" +import { base64Encode } from "@opencoder-ai/util/encode" import { decode64 } from "@/utils/base64" -import { EventSessionError } from "@opencode-ai/sdk/v2" +import { EventSessionError } from "@opencoder-ai/sdk/v2" import { Persist, persisted } from "@/utils/persist" import { playSound, soundSrc } from "@/utils/sound" diff --git a/packages/app/src/context/permission.tsx b/packages/app/src/context/permission.tsx index 988723834f95..46e774684c28 100644 --- a/packages/app/src/context/permission.tsx +++ b/packages/app/src/context/permission.tsx @@ -1,12 +1,12 @@ import { createMemo, onCleanup } from "solid-js" import { createStore, produce } from "solid-js/store" -import { createSimpleContext } from "@opencode-ai/ui/context" -import type { PermissionRequest } from "@opencode-ai/sdk/v2/client" +import { createSimpleContext } from "@opencoder-ai/ui/context" +import type { PermissionRequest } from "@opencoder-ai/sdk/v2/client" import { Persist, persisted } from "@/utils/persist" import { useGlobalSDK } from "@/context/global-sdk" import { useGlobalSync } from "./global-sync" import { useParams } from "@solidjs/router" -import { base64Encode } from "@opencode-ai/util/encode" +import { base64Encode } from "@opencoder-ai/util/encode" import { decode64 } from "@/utils/base64" type PermissionRespondFn = (input: { diff --git a/packages/app/src/context/platform.tsx b/packages/app/src/context/platform.tsx index 6d4464258a06..5aa27c10c95e 100644 --- a/packages/app/src/context/platform.tsx +++ b/packages/app/src/context/platform.tsx @@ -1,4 +1,4 @@ -import { createSimpleContext } from "@opencode-ai/ui/context" +import { createSimpleContext } from "@opencoder-ai/ui/context" import { AsyncStorage, SyncStorage } from "@solid-primitives/storage" import type { Accessor } from "solid-js" diff --git a/packages/app/src/context/prompt.tsx b/packages/app/src/context/prompt.tsx index 064892105184..9ca5f1c026ac 100644 --- a/packages/app/src/context/prompt.tsx +++ b/packages/app/src/context/prompt.tsx @@ -1,10 +1,10 @@ import { createStore, type SetStoreFunction } from "solid-js/store" -import { createSimpleContext } from "@opencode-ai/ui/context" +import { createSimpleContext } from "@opencoder-ai/ui/context" import { batch, createMemo, createRoot, onCleanup } from "solid-js" import { useParams } from "@solidjs/router" import type { FileSelection } from "@/context/file" import { Persist, persisted } from "@/utils/persist" -import { checksum } from "@opencode-ai/util/encode" +import { checksum } from "@opencoder-ai/util/encode" interface PartBase { content: string diff --git a/packages/app/src/context/sdk.tsx b/packages/app/src/context/sdk.tsx index 555933619af2..37865d7ad547 100644 --- a/packages/app/src/context/sdk.tsx +++ b/packages/app/src/context/sdk.tsx @@ -1,5 +1,5 @@ -import { createOpencodeClient, type Event } from "@opencode-ai/sdk/v2/client" -import { createSimpleContext } from "@opencode-ai/ui/context" +import { createOpencodeClient, type Event } from "@opencoder-ai/sdk/v2/client" +import { createSimpleContext } from "@opencoder-ai/ui/context" import { createGlobalEmitter } from "@solid-primitives/event-bus" import { createEffect, createMemo, onCleanup, type Accessor } from "solid-js" import { useGlobalSDK } from "./global-sdk" diff --git a/packages/app/src/context/server.tsx b/packages/app/src/context/server.tsx index 5d3d0cf3aa6c..a9088916251a 100644 --- a/packages/app/src/context/server.tsx +++ b/packages/app/src/context/server.tsx @@ -1,4 +1,4 @@ -import { createSimpleContext } from "@opencode-ai/ui/context" +import { createSimpleContext } from "@opencoder-ai/ui/context" import { batch, createEffect, createMemo, onCleanup } from "solid-js" import { createStore } from "solid-js/store" import { usePlatform } from "@/context/platform" diff --git a/packages/app/src/context/settings.tsx b/packages/app/src/context/settings.tsx index d72d4ceb1ec9..2c611a695b0e 100644 --- a/packages/app/src/context/settings.tsx +++ b/packages/app/src/context/settings.tsx @@ -1,6 +1,6 @@ import { createStore, reconcile } from "solid-js/store" import { createEffect, createMemo } from "solid-js" -import { createSimpleContext } from "@opencode-ai/ui/context" +import { createSimpleContext } from "@opencoder-ai/ui/context" import { persisted } from "@/utils/persist" export interface NotificationSettings { diff --git a/packages/app/src/context/sync.tsx b/packages/app/src/context/sync.tsx index 5dfa62d700e1..bc9fe3311996 100644 --- a/packages/app/src/context/sync.tsx +++ b/packages/app/src/context/sync.tsx @@ -1,11 +1,11 @@ import { batch, createMemo } from "solid-js" import { createStore, produce, reconcile } from "solid-js/store" -import { Binary } from "@opencode-ai/util/binary" -import { retry } from "@opencode-ai/util/retry" -import { createSimpleContext } from "@opencode-ai/ui/context" +import { Binary } from "@opencoder-ai/util/binary" +import { retry } from "@opencoder-ai/util/retry" +import { createSimpleContext } from "@opencoder-ai/ui/context" import { useGlobalSync } from "./global-sync" import { useSDK } from "./sdk" -import type { Message, Part } from "@opencode-ai/sdk/v2/client" +import type { Message, Part } from "@opencoder-ai/sdk/v2/client" function sortParts(parts: Part[]) { return parts.filter((part) => !!part?.id).sort((a, b) => cmp(a.id, b.id)) diff --git a/packages/app/src/context/terminal.tsx b/packages/app/src/context/terminal.tsx index 64f026219ab9..3724ad136663 100644 --- a/packages/app/src/context/terminal.tsx +++ b/packages/app/src/context/terminal.tsx @@ -1,5 +1,5 @@ import { createStore, produce } from "solid-js/store" -import { createSimpleContext } from "@opencode-ai/ui/context" +import { createSimpleContext } from "@opencoder-ai/ui/context" import { batch, createEffect, createMemo, createRoot, onCleanup } from "solid-js" import { useParams } from "@solidjs/router" import { useSDK } from "./sdk" diff --git a/packages/app/src/index.css b/packages/app/src/index.css index 4af87bca632a..6f75ae260c0c 100644 --- a/packages/app/src/index.css +++ b/packages/app/src/index.css @@ -1 +1,57 @@ -@import "@opencode-ai/ui/styles/tailwind"; +@import "@opencoder-ai/ui/styles/tailwind"; + +:root { + a { + cursor: default; + } +} + +[data-component="markdown"] ul { + list-style: disc outside; + padding-left: 1.5rem; +} + +[data-component="markdown"] ol { + list-style: decimal outside; + padding-left: 1.5rem; +} + +[data-component="markdown"] li > p:first-child { + display: inline; + margin: 0; +} + +[data-component="markdown"] li > p + p { + display: block; + margin-top: 0.5rem; +} + +*[data-tauri-drag-region] { + app-region: drag; +} + +.session-scroller::-webkit-scrollbar { + width: 10px !important; + height: 10px !important; +} + +.session-scroller::-webkit-scrollbar-track { + background: transparent !important; + border-radius: 5px !important; +} + +.session-scroller::-webkit-scrollbar-thumb { + background: var(--border-weak-base) !important; + border-radius: 5px !important; + border: 3px solid transparent !important; + background-clip: padding-box !important; +} + +.session-scroller::-webkit-scrollbar-thumb:hover { + background: var(--border-weak-base) !important; +} + +.session-scroller { + scrollbar-width: thin !important; + scrollbar-color: var(--border-weak-base) transparent !important; +} diff --git a/packages/app/src/pages/directory-layout.tsx b/packages/app/src/pages/directory-layout.tsx index 2dee09dfb06c..c6891f18c7d7 100644 --- a/packages/app/src/pages/directory-layout.tsx +++ b/packages/app/src/pages/directory-layout.tsx @@ -5,10 +5,10 @@ import { SDKProvider, useSDK } from "@/context/sdk" import { SyncProvider, useSync } from "@/context/sync" import { LocalProvider } from "@/context/local" -import { DataProvider } from "@opencode-ai/ui/context" -import type { QuestionAnswer } from "@opencode-ai/sdk/v2" +import { DataProvider } from "@opencoder-ai/ui/context" +import type { QuestionAnswer } from "@opencoder-ai/sdk/v2" import { decode64 } from "@/utils/base64" -import { showToast } from "@opencode-ai/ui/toast" +import { showToast } from "@opencoder-ai/ui/toast" import { useLanguage } from "@/context/language" function DirectoryDataProvider(props: ParentProps<{ directory: string }>) { diff --git a/packages/app/src/pages/error.tsx b/packages/app/src/pages/error.tsx index a30d86d18093..75b08ae7a496 100644 --- a/packages/app/src/pages/error.tsx +++ b/packages/app/src/pages/error.tsx @@ -1,11 +1,11 @@ -import { TextField } from "@opencode-ai/ui/text-field" -import { Logo } from "@opencode-ai/ui/logo" -import { Button } from "@opencode-ai/ui/button" +import { TextField } from "@opencoder-ai/ui/text-field" +import { Logo } from "@opencoder-ai/ui/logo" +import { Button } from "@opencoder-ai/ui/button" import { Component, Show } from "solid-js" import { createStore } from "solid-js/store" import { usePlatform } from "@/context/platform" import { useLanguage } from "@/context/language" -import { Icon } from "@opencode-ai/ui/icon" +import { Icon } from "@opencoder-ai/ui/icon" export type InitError = { name: string diff --git a/packages/app/src/pages/home.tsx b/packages/app/src/pages/home.tsx index ba3a2b942708..c3467eb6757a 100644 --- a/packages/app/src/pages/home.tsx +++ b/packages/app/src/pages/home.tsx @@ -1,13 +1,13 @@ import { createMemo, For, Match, Switch } from "solid-js" -import { Button } from "@opencode-ai/ui/button" -import { Logo } from "@opencode-ai/ui/logo" +import { Button } from "@opencoder-ai/ui/button" +import { Logo } from "@opencoder-ai/ui/logo" import { useLayout } from "@/context/layout" import { useNavigate } from "@solidjs/router" -import { base64Encode } from "@opencode-ai/util/encode" -import { Icon } from "@opencode-ai/ui/icon" +import { base64Encode } from "@opencoder-ai/util/encode" +import { Icon } from "@opencoder-ai/ui/icon" import { usePlatform } from "@/context/platform" import { DateTime } from "luxon" -import { useDialog } from "@opencode-ai/ui/context/dialog" +import { useDialog } from "@opencoder-ai/ui/context/dialog" import { DialogSelectDirectory } from "@/components/dialog-select-directory" import { DialogSelectServer } from "@/components/dialog-select-server" import { useServer } from "@/context/server" diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index 7eb064f425d9..49aae68c6821 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -16,36 +16,36 @@ import { A, useNavigate, useParams } from "@solidjs/router" import { useLayout, LocalProject } from "@/context/layout" import { useGlobalSync } from "@/context/global-sync" import { Persist, persisted } from "@/utils/persist" -import { base64Encode } from "@opencode-ai/util/encode" +import { base64Encode } from "@opencoder-ai/util/encode" import { decode64 } from "@/utils/base64" -import { ResizeHandle } from "@opencode-ai/ui/resize-handle" -import { Button } from "@opencode-ai/ui/button" -import { Icon } from "@opencode-ai/ui/icon" -import { IconButton } from "@opencode-ai/ui/icon-button" -import { Tooltip, TooltipKeybind } from "@opencode-ai/ui/tooltip" -import { DropdownMenu } from "@opencode-ai/ui/dropdown-menu" -import { Dialog } from "@opencode-ai/ui/dialog" -import { getFilename } from "@opencode-ai/util/path" -import { Session, type Message } from "@opencode-ai/sdk/v2/client" +import { ResizeHandle } from "@opencoder-ai/ui/resize-handle" +import { Button } from "@opencoder-ai/ui/button" +import { Icon } from "@opencoder-ai/ui/icon" +import { IconButton } from "@opencoder-ai/ui/icon-button" +import { Tooltip, TooltipKeybind } from "@opencoder-ai/ui/tooltip" +import { DropdownMenu } from "@opencoder-ai/ui/dropdown-menu" +import { Dialog } from "@opencoder-ai/ui/dialog" +import { getFilename } from "@opencoder-ai/util/path" +import { Session, type Message } from "@opencoder-ai/sdk/v2/client" import { usePlatform } from "@/context/platform" import { useSettings } from "@/context/settings" import { createStore, produce, reconcile } from "solid-js/store" import { DragDropProvider, DragDropSensors, DragOverlay, SortableProvider, closestCenter } from "@thisbeyond/solid-dnd" import type { DragEvent } from "@thisbeyond/solid-dnd" import { useProviders } from "@/hooks/use-providers" -import { showToast, Toast, toaster } from "@opencode-ai/ui/toast" +import { showToast, Toast, toaster } from "@opencoder-ai/ui/toast" import { useGlobalSDK } from "@/context/global-sdk" import { clearWorkspaceTerminals } from "@/context/terminal" import { useNotification } from "@/context/notification" import { usePermission } from "@/context/permission" -import { Binary } from "@opencode-ai/util/binary" -import { retry } from "@opencode-ai/util/retry" +import { Binary } from "@opencoder-ai/util/binary" +import { retry } from "@opencoder-ai/util/retry" import { playSound, soundSrc } from "@/utils/sound" import { createAim } from "@/utils/aim" import { Worktree as WorktreeState } from "@/utils/worktree" -import { useDialog } from "@opencode-ai/ui/context/dialog" -import { useTheme, type ColorScheme } from "@opencode-ai/ui/theme" +import { useDialog } from "@opencoder-ai/ui/context/dialog" +import { useTheme, type ColorScheme } from "@opencoder-ai/ui/theme" import { DialogSelectProvider } from "@/components/dialog-select-provider" import { DialogSelectServer } from "@/components/dialog-select-server" import { DialogSettings } from "@/components/dialog-settings" diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx index 101f3312c3f6..1220aaf1446d 100644 --- a/packages/app/src/pages/session.tsx +++ b/packages/app/src/pages/session.tsx @@ -6,37 +6,37 @@ import { useLocal } from "@/context/local" import { selectionFromLines, useFile, type FileSelection, type SelectedLineRange } from "@/context/file" import { createStore, produce } from "solid-js/store" import { SessionContextUsage } from "@/components/session-context-usage" -import { IconButton } from "@opencode-ai/ui/icon-button" -import { Button } from "@opencode-ai/ui/button" -import { Tooltip, TooltipKeybind } from "@opencode-ai/ui/tooltip" -import { Dialog } from "@opencode-ai/ui/dialog" -import { ResizeHandle } from "@opencode-ai/ui/resize-handle" -import { Tabs } from "@opencode-ai/ui/tabs" -import { Select } from "@opencode-ai/ui/select" -import { useCodeComponent } from "@opencode-ai/ui/context/code" -import { createAutoScroll } from "@opencode-ai/ui/hooks" -import { Mark } from "@opencode-ai/ui/logo" +import { IconButton } from "@opencoder-ai/ui/icon-button" +import { Button } from "@opencoder-ai/ui/button" +import { Tooltip, TooltipKeybind } from "@opencoder-ai/ui/tooltip" +import { Dialog } from "@opencoder-ai/ui/dialog" +import { ResizeHandle } from "@opencoder-ai/ui/resize-handle" +import { Tabs } from "@opencoder-ai/ui/tabs" +import { Select } from "@opencoder-ai/ui/select" +import { useCodeComponent } from "@opencoder-ai/ui/context/code" +import { createAutoScroll } from "@opencoder-ai/ui/hooks" +import { Mark } from "@opencoder-ai/ui/logo" import { DragDropProvider, DragDropSensors, DragOverlay, SortableProvider, closestCenter } from "@thisbeyond/solid-dnd" import type { DragEvent } from "@thisbeyond/solid-dnd" import { useSync } from "@/context/sync" import { useTerminal, type LocalPTY } from "@/context/terminal" import { useLayout } from "@/context/layout" -import { checksum, base64Encode } from "@opencode-ai/util/encode" -import { findLast } from "@opencode-ai/util/array" -import { useDialog } from "@opencode-ai/ui/context/dialog" +import { checksum, base64Encode } from "@opencoder-ai/util/encode" +import { findLast } from "@opencoder-ai/util/array" +import { useDialog } from "@opencoder-ai/ui/context/dialog" import { DialogSelectFile } from "@/components/dialog-select-file" import FileTree from "@/components/file-tree" import { useCommand } from "@/context/command" import { useLanguage } from "@/context/language" import { useNavigate, useParams } from "@solidjs/router" -import { UserMessage } from "@opencode-ai/sdk/v2" +import { UserMessage } from "@opencoder-ai/sdk/v2" import { useSDK } from "@/context/sdk" import { usePrompt } from "@/context/prompt" import { useComments } from "@/context/comments" import { ConstrainDragYAxis, getDraggableId } from "@/utils/solid-dnd" import { usePermission } from "@/context/permission" -import { showToast } from "@opencode-ai/ui/toast" +import { showToast } from "@opencoder-ai/ui/toast" import { SessionHeader, SessionContextTab, SortableTab, FileVisual, NewSessionView } from "@/components/session" import { navMark, navParams } from "@/utils/perf" import { same } from "@/utils/same" diff --git a/packages/app/src/utils/base64.ts b/packages/app/src/utils/base64.ts index c1f9d88c6e96..2c52b0abeed3 100644 --- a/packages/app/src/utils/base64.ts +++ b/packages/app/src/utils/base64.ts @@ -1,4 +1,4 @@ -import { base64Decode } from "@opencode-ai/util/encode" +import { base64Decode } from "@opencoder-ai/util/encode" export function decode64(value: string | undefined) { if (value === undefined) return diff --git a/packages/app/src/utils/persist.ts b/packages/app/src/utils/persist.ts index 91c504742a94..a50c120dbc02 100644 --- a/packages/app/src/utils/persist.ts +++ b/packages/app/src/utils/persist.ts @@ -1,6 +1,6 @@ import { Platform, usePlatform } from "@/context/platform" import { makePersisted, type AsyncStorage, type SyncStorage } from "@solid-primitives/storage" -import { checksum } from "@opencode-ai/util/encode" +import { checksum } from "@opencoder-ai/util/encode" import { createResource, type Accessor } from "solid-js" import type { SetStoreFunction, Store } from "solid-js/store" diff --git a/packages/app/src/utils/prompt.ts b/packages/app/src/utils/prompt.ts index 35aec0071aac..e247da864984 100644 --- a/packages/app/src/utils/prompt.ts +++ b/packages/app/src/utils/prompt.ts @@ -1,4 +1,4 @@ -import type { AgentPart as MessageAgentPart, FilePart, Part, TextPart } from "@opencode-ai/sdk/v2" +import type { AgentPart as MessageAgentPart, FilePart, Part, TextPart } from "@opencoder-ai/sdk/v2" import type { AgentPart, FileAttachmentPart, ImageAttachmentPart, Prompt } from "@/context/prompt" type Inline = diff --git a/packages/app/src/utils/sound.ts b/packages/app/src/utils/sound.ts index 6dea812ec81b..fe82bc448c63 100644 --- a/packages/app/src/utils/sound.ts +++ b/packages/app/src/utils/sound.ts @@ -1,48 +1,48 @@ -import alert01 from "@opencode-ai/ui/audio/alert-01.aac" -import alert02 from "@opencode-ai/ui/audio/alert-02.aac" -import alert03 from "@opencode-ai/ui/audio/alert-03.aac" -import alert04 from "@opencode-ai/ui/audio/alert-04.aac" -import alert05 from "@opencode-ai/ui/audio/alert-05.aac" -import alert06 from "@opencode-ai/ui/audio/alert-06.aac" -import alert07 from "@opencode-ai/ui/audio/alert-07.aac" -import alert08 from "@opencode-ai/ui/audio/alert-08.aac" -import alert09 from "@opencode-ai/ui/audio/alert-09.aac" -import alert10 from "@opencode-ai/ui/audio/alert-10.aac" -import bipbop01 from "@opencode-ai/ui/audio/bip-bop-01.aac" -import bipbop02 from "@opencode-ai/ui/audio/bip-bop-02.aac" -import bipbop03 from "@opencode-ai/ui/audio/bip-bop-03.aac" -import bipbop04 from "@opencode-ai/ui/audio/bip-bop-04.aac" -import bipbop05 from "@opencode-ai/ui/audio/bip-bop-05.aac" -import bipbop06 from "@opencode-ai/ui/audio/bip-bop-06.aac" -import bipbop07 from "@opencode-ai/ui/audio/bip-bop-07.aac" -import bipbop08 from "@opencode-ai/ui/audio/bip-bop-08.aac" -import bipbop09 from "@opencode-ai/ui/audio/bip-bop-09.aac" -import bipbop10 from "@opencode-ai/ui/audio/bip-bop-10.aac" -import nope01 from "@opencode-ai/ui/audio/nope-01.aac" -import nope02 from "@opencode-ai/ui/audio/nope-02.aac" -import nope03 from "@opencode-ai/ui/audio/nope-03.aac" -import nope04 from "@opencode-ai/ui/audio/nope-04.aac" -import nope05 from "@opencode-ai/ui/audio/nope-05.aac" -import nope06 from "@opencode-ai/ui/audio/nope-06.aac" -import nope07 from "@opencode-ai/ui/audio/nope-07.aac" -import nope08 from "@opencode-ai/ui/audio/nope-08.aac" -import nope09 from "@opencode-ai/ui/audio/nope-09.aac" -import nope10 from "@opencode-ai/ui/audio/nope-10.aac" -import nope11 from "@opencode-ai/ui/audio/nope-11.aac" -import nope12 from "@opencode-ai/ui/audio/nope-12.aac" -import staplebops01 from "@opencode-ai/ui/audio/staplebops-01.aac" -import staplebops02 from "@opencode-ai/ui/audio/staplebops-02.aac" -import staplebops03 from "@opencode-ai/ui/audio/staplebops-03.aac" -import staplebops04 from "@opencode-ai/ui/audio/staplebops-04.aac" -import staplebops05 from "@opencode-ai/ui/audio/staplebops-05.aac" -import staplebops06 from "@opencode-ai/ui/audio/staplebops-06.aac" -import staplebops07 from "@opencode-ai/ui/audio/staplebops-07.aac" -import yup01 from "@opencode-ai/ui/audio/yup-01.aac" -import yup02 from "@opencode-ai/ui/audio/yup-02.aac" -import yup03 from "@opencode-ai/ui/audio/yup-03.aac" -import yup04 from "@opencode-ai/ui/audio/yup-04.aac" -import yup05 from "@opencode-ai/ui/audio/yup-05.aac" -import yup06 from "@opencode-ai/ui/audio/yup-06.aac" +import alert01 from "@opencoder-ai/ui/audio/alert-01.aac" +import alert02 from "@opencoder-ai/ui/audio/alert-02.aac" +import alert03 from "@opencoder-ai/ui/audio/alert-03.aac" +import alert04 from "@opencoder-ai/ui/audio/alert-04.aac" +import alert05 from "@opencoder-ai/ui/audio/alert-05.aac" +import alert06 from "@opencoder-ai/ui/audio/alert-06.aac" +import alert07 from "@opencoder-ai/ui/audio/alert-07.aac" +import alert08 from "@opencoder-ai/ui/audio/alert-08.aac" +import alert09 from "@opencoder-ai/ui/audio/alert-09.aac" +import alert10 from "@opencoder-ai/ui/audio/alert-10.aac" +import bipbop01 from "@opencoder-ai/ui/audio/bip-bop-01.aac" +import bipbop02 from "@opencoder-ai/ui/audio/bip-bop-02.aac" +import bipbop03 from "@opencoder-ai/ui/audio/bip-bop-03.aac" +import bipbop04 from "@opencoder-ai/ui/audio/bip-bop-04.aac" +import bipbop05 from "@opencoder-ai/ui/audio/bip-bop-05.aac" +import bipbop06 from "@opencoder-ai/ui/audio/bip-bop-06.aac" +import bipbop07 from "@opencoder-ai/ui/audio/bip-bop-07.aac" +import bipbop08 from "@opencoder-ai/ui/audio/bip-bop-08.aac" +import bipbop09 from "@opencoder-ai/ui/audio/bip-bop-09.aac" +import bipbop10 from "@opencoder-ai/ui/audio/bip-bop-10.aac" +import nope01 from "@opencoder-ai/ui/audio/nope-01.aac" +import nope02 from "@opencoder-ai/ui/audio/nope-02.aac" +import nope03 from "@opencoder-ai/ui/audio/nope-03.aac" +import nope04 from "@opencoder-ai/ui/audio/nope-04.aac" +import nope05 from "@opencoder-ai/ui/audio/nope-05.aac" +import nope06 from "@opencoder-ai/ui/audio/nope-06.aac" +import nope07 from "@opencoder-ai/ui/audio/nope-07.aac" +import nope08 from "@opencoder-ai/ui/audio/nope-08.aac" +import nope09 from "@opencoder-ai/ui/audio/nope-09.aac" +import nope10 from "@opencoder-ai/ui/audio/nope-10.aac" +import nope11 from "@opencoder-ai/ui/audio/nope-11.aac" +import nope12 from "@opencoder-ai/ui/audio/nope-12.aac" +import staplebops01 from "@opencoder-ai/ui/audio/staplebops-01.aac" +import staplebops02 from "@opencoder-ai/ui/audio/staplebops-02.aac" +import staplebops03 from "@opencoder-ai/ui/audio/staplebops-03.aac" +import staplebops04 from "@opencoder-ai/ui/audio/staplebops-04.aac" +import staplebops05 from "@opencoder-ai/ui/audio/staplebops-05.aac" +import staplebops06 from "@opencoder-ai/ui/audio/staplebops-06.aac" +import staplebops07 from "@opencoder-ai/ui/audio/staplebops-07.aac" +import yup01 from "@opencoder-ai/ui/audio/yup-01.aac" +import yup02 from "@opencoder-ai/ui/audio/yup-02.aac" +import yup03 from "@opencoder-ai/ui/audio/yup-03.aac" +import yup04 from "@opencoder-ai/ui/audio/yup-04.aac" +import yup05 from "@opencoder-ai/ui/audio/yup-05.aac" +import yup06 from "@opencoder-ai/ui/audio/yup-06.aac" export const SOUND_OPTIONS = [ { id: "alert-01", label: "sound.option.alert01", src: alert01 }, diff --git a/packages/console/app/package.json b/packages/console/app/package.json index 3d7ef578515f..cc4b1a4208c0 100644 --- a/packages/console/app/package.json +++ b/packages/console/app/package.json @@ -1,6 +1,6 @@ { - "name": "@opencode-ai/console-app", - "version": "1.1.65", + "name": "@opencoder-ai/console-app", + "version": "1.1.63", "type": "module", "license": "MIT", "scripts": { @@ -16,10 +16,10 @@ "@jsx-email/render": "1.1.1", "@kobalte/core": "catalog:", "@openauthjs/openauth": "catalog:", - "@opencode-ai/console-core": "workspace:*", - "@opencode-ai/console-mail": "workspace:*", - "@opencode-ai/console-resource": "workspace:*", - "@opencode-ai/ui": "workspace:*", + "@opencoder-ai/console-core": "workspace:*", + "@opencoder-ai/console-mail": "workspace:*", + "@opencoder-ai/console-resource": "workspace:*", + "@opencoder-ai/ui": "workspace:*", "@smithy/eventstream-codec": "4.2.7", "@smithy/util-utf8": "4.2.0", "@solidjs/meta": "catalog:", diff --git a/packages/console/app/src/app.tsx b/packages/console/app/src/app.tsx index 3eb70606a45c..ab46e74c157c 100644 --- a/packages/console/app/src/app.tsx +++ b/packages/console/app/src/app.tsx @@ -2,8 +2,8 @@ import { MetaProvider, Title, Meta } from "@solidjs/meta" import { Router } from "@solidjs/router" import { FileRoutes } from "@solidjs/start/router" import { Suspense } from "solid-js" -import { Favicon } from "@opencode-ai/ui/favicon" -import { Font } from "@opencode-ai/ui/font" +import { Favicon } from "@opencoder-ai/ui/favicon" +import { Font } from "@opencoder-ai/ui/font" import "@ibm/plex/css/ibm-plex.css" import "./app.css" import { LanguageProvider } from "~/context/language" diff --git a/packages/console/app/src/component/email-signup.tsx b/packages/console/app/src/component/email-signup.tsx index bd33e92006ae..607cbb92cc3b 100644 --- a/packages/console/app/src/component/email-signup.tsx +++ b/packages/console/app/src/component/email-signup.tsx @@ -1,6 +1,6 @@ import { action, useSubmission } from "@solidjs/router" import dock from "../asset/lander/dock.png" -import { Resource } from "@opencode-ai/console-resource" +import { Resource } from "@opencoder-ai/console-resource" import { Show } from "solid-js" import { useI18n } from "~/context/i18n" diff --git a/packages/console/app/src/context/auth.ts b/packages/console/app/src/context/auth.ts index aed07a630f8c..170000040a43 100644 --- a/packages/console/app/src/context/auth.ts +++ b/packages/console/app/src/context/auth.ts @@ -1,8 +1,8 @@ import { getRequestEvent } from "solid-js/web" -import { and, Database, eq, inArray, isNull, sql } from "@opencode-ai/console-core/drizzle/index.js" -import { UserTable } from "@opencode-ai/console-core/schema/user.sql.js" +import { and, Database, eq, inArray, isNull, sql } from "@opencoder-ai/console-core/drizzle/index.js" +import { UserTable } from "@opencoder-ai/console-core/schema/user.sql.js" import { redirect } from "@solidjs/router" -import { Actor } from "@opencode-ai/console-core/actor.js" +import { Actor } from "@opencoder-ai/console-core/actor.js" import { createClient } from "@openauthjs/openauth/client" @@ -12,7 +12,7 @@ export const AuthClient = createClient({ }) import { useSession } from "@solidjs/start/http" -import { Resource } from "@opencode-ai/console-resource" +import { Resource } from "@opencoder-ai/console-resource" export interface AuthSession { account?: Record< diff --git a/packages/console/app/src/context/auth.withActor.ts b/packages/console/app/src/context/auth.withActor.ts index ff377cda4602..1853b69901dd 100644 --- a/packages/console/app/src/context/auth.withActor.ts +++ b/packages/console/app/src/context/auth.withActor.ts @@ -1,4 +1,4 @@ -import { Actor } from "@opencode-ai/console-core/actor.js" +import { Actor } from "@opencoder-ai/console-core/actor.js" import { getActor } from "./auth" export async function withActor(fn: () => T, workspace?: string) { diff --git a/packages/console/app/src/routes/api/enterprise.ts b/packages/console/app/src/routes/api/enterprise.ts index 6776a7b3c735..15cc893e0e5e 100644 --- a/packages/console/app/src/routes/api/enterprise.ts +++ b/packages/console/app/src/routes/api/enterprise.ts @@ -1,5 +1,5 @@ import type { APIEvent } from "@solidjs/start/server" -import { AWS } from "@opencode-ai/console-core/aws.js" +import { AWS } from "@opencoder-ai/console-core/aws.js" interface EnterpriseFormData { name: string diff --git a/packages/console/app/src/routes/bench/[id].tsx b/packages/console/app/src/routes/bench/[id].tsx index dd96bcbbcee5..10144a1c4c5c 100644 --- a/packages/console/app/src/routes/bench/[id].tsx +++ b/packages/console/app/src/routes/bench/[id].tsx @@ -1,8 +1,8 @@ import { Title } from "@solidjs/meta" import { createAsync, query, useParams } from "@solidjs/router" import { createSignal, For, Show } from "solid-js" -import { Database, desc, eq } from "@opencode-ai/console-core/drizzle/index.js" -import { BenchmarkTable } from "@opencode-ai/console-core/schema/benchmark.sql.js" +import { Database, desc, eq } from "@opencoder-ai/console-core/drizzle/index.js" +import { BenchmarkTable } from "@opencoder-ai/console-core/schema/benchmark.sql.js" import { useI18n } from "~/context/i18n" interface TaskSource { diff --git a/packages/console/app/src/routes/bench/index.tsx b/packages/console/app/src/routes/bench/index.tsx index 17798eff4e1f..2a7e857a1636 100644 --- a/packages/console/app/src/routes/bench/index.tsx +++ b/packages/console/app/src/routes/bench/index.tsx @@ -1,8 +1,8 @@ import { Title } from "@solidjs/meta" import { A, createAsync, query } from "@solidjs/router" import { createMemo, For, Show } from "solid-js" -import { Database, desc } from "@opencode-ai/console-core/drizzle/index.js" -import { BenchmarkTable } from "@opencode-ai/console-core/schema/benchmark.sql.js" +import { Database, desc } from "@opencoder-ai/console-core/drizzle/index.js" +import { BenchmarkTable } from "@opencoder-ai/console-core/schema/benchmark.sql.js" import { useI18n } from "~/context/i18n" interface BenchmarkResult { diff --git a/packages/console/app/src/routes/bench/submission.ts b/packages/console/app/src/routes/bench/submission.ts index 94639439b114..3dfb6db1021e 100644 --- a/packages/console/app/src/routes/bench/submission.ts +++ b/packages/console/app/src/routes/bench/submission.ts @@ -1,7 +1,7 @@ import type { APIEvent } from "@solidjs/start/server" -import { Database } from "@opencode-ai/console-core/drizzle/index.js" -import { BenchmarkTable } from "@opencode-ai/console-core/schema/benchmark.sql.js" -import { Identifier } from "@opencode-ai/console-core/identifier.js" +import { Database } from "@opencoder-ai/console-core/drizzle/index.js" +import { BenchmarkTable } from "@opencoder-ai/console-core/schema/benchmark.sql.js" +import { Identifier } from "@opencoder-ai/console-core/identifier.js" interface SubmissionBody { model: string diff --git a/packages/console/app/src/routes/black/subscribe/[plan].tsx b/packages/console/app/src/routes/black/subscribe/[plan].tsx index 644d87d9b325..909561e1024f 100644 --- a/packages/console/app/src/routes/black/subscribe/[plan].tsx +++ b/packages/console/app/src/routes/black/subscribe/[plan].tsx @@ -6,14 +6,14 @@ import { Elements, PaymentElement, useStripe, useElements, AddressElement } from import { PlanID, plans } from "../common" import { getActor, useAuthSession } from "~/context/auth" import { withActor } from "~/context/auth.withActor" -import { Actor } from "@opencode-ai/console-core/actor.js" -import { and, Database, eq, isNull } from "@opencode-ai/console-core/drizzle/index.js" -import { WorkspaceTable } from "@opencode-ai/console-core/schema/workspace.sql.js" -import { UserTable } from "@opencode-ai/console-core/schema/user.sql.js" +import { Actor } from "@opencoder-ai/console-core/actor.js" +import { and, Database, eq, isNull } from "@opencoder-ai/console-core/drizzle/index.js" +import { WorkspaceTable } from "@opencoder-ai/console-core/schema/workspace.sql.js" +import { UserTable } from "@opencoder-ai/console-core/schema/user.sql.js" import { createList } from "solid-list" import { Modal } from "~/component/modal" -import { BillingTable } from "@opencode-ai/console-core/schema/billing.sql.js" -import { Billing } from "@opencode-ai/console-core/billing.js" +import { BillingTable } from "@opencoder-ai/console-core/schema/billing.sql.js" +import { Billing } from "@opencoder-ai/console-core/billing.js" import { useI18n } from "~/context/i18n" import { useLanguage } from "~/context/language" import { formError } from "~/lib/form-error" diff --git a/packages/console/app/src/routes/debug/index.ts b/packages/console/app/src/routes/debug/index.ts index 2bdd269e7815..e8229aa303f4 100644 --- a/packages/console/app/src/routes/debug/index.ts +++ b/packages/console/app/src/routes/debug/index.ts @@ -1,7 +1,7 @@ import type { APIEvent } from "@solidjs/start/server" import { json } from "@solidjs/router" -import { Database } from "@opencode-ai/console-core/drizzle/index.js" -import { UserTable } from "@opencode-ai/console-core/schema/user.sql.js" +import { Database } from "@opencoder-ai/console-core/drizzle/index.js" +import { UserTable } from "@opencoder-ai/console-core/schema/user.sql.js" export async function GET(evt: APIEvent) { return json({ diff --git a/packages/console/app/src/routes/stripe/webhook.ts b/packages/console/app/src/routes/stripe/webhook.ts index 828eb4c711cc..3fb115bfdc0e 100644 --- a/packages/console/app/src/routes/stripe/webhook.ts +++ b/packages/console/app/src/routes/stripe/webhook.ts @@ -1,13 +1,13 @@ -import { Billing } from "@opencode-ai/console-core/billing.js" +import { Billing } from "@opencoder-ai/console-core/billing.js" import type { APIEvent } from "@solidjs/start/server" -import { and, Database, eq, isNull, sql } from "@opencode-ai/console-core/drizzle/index.js" -import { BillingTable, PaymentTable, SubscriptionTable } from "@opencode-ai/console-core/schema/billing.sql.js" -import { Identifier } from "@opencode-ai/console-core/identifier.js" -import { centsToMicroCents } from "@opencode-ai/console-core/util/price.js" -import { Actor } from "@opencode-ai/console-core/actor.js" -import { Resource } from "@opencode-ai/console-resource" -import { UserTable } from "@opencode-ai/console-core/schema/user.sql.js" -import { AuthTable } from "@opencode-ai/console-core/schema/auth.sql.js" +import { and, Database, eq, isNull, sql } from "@opencoder-ai/console-core/drizzle/index.js" +import { BillingTable, PaymentTable, SubscriptionTable } from "@opencoder-ai/console-core/schema/billing.sql.js" +import { Identifier } from "@opencoder-ai/console-core/identifier.js" +import { centsToMicroCents } from "@opencoder-ai/console-core/util/price.js" +import { Actor } from "@opencoder-ai/console-core/actor.js" +import { Resource } from "@opencoder-ai/console-resource" +import { UserTable } from "@opencoder-ai/console-core/schema/user.sql.js" +import { AuthTable } from "@opencoder-ai/console-core/schema/auth.sql.js" export async function POST(input: APIEvent) { const body = await Billing.stripe().webhooks.constructEventAsync( diff --git a/packages/console/app/src/routes/workspace-picker.tsx b/packages/console/app/src/routes/workspace-picker.tsx index ffec2f3beed3..8856665b845b 100644 --- a/packages/console/app/src/routes/workspace-picker.tsx +++ b/packages/console/app/src/routes/workspace-picker.tsx @@ -2,11 +2,11 @@ import { query, useParams, action, createAsync, redirect, useSubmission } from " import { For, Show, createEffect } from "solid-js" import { createStore } from "solid-js/store" import { withActor } from "~/context/auth.withActor" -import { Actor } from "@opencode-ai/console-core/actor.js" -import { and, Database, eq, isNull } from "@opencode-ai/console-core/drizzle/index.js" -import { WorkspaceTable } from "@opencode-ai/console-core/schema/workspace.sql.js" -import { UserTable } from "@opencode-ai/console-core/schema/user.sql.js" -import { Workspace } from "@opencode-ai/console-core/workspace.js" +import { Actor } from "@opencoder-ai/console-core/actor.js" +import { and, Database, eq, isNull } from "@opencoder-ai/console-core/drizzle/index.js" +import { WorkspaceTable } from "@opencoder-ai/console-core/schema/workspace.sql.js" +import { UserTable } from "@opencoder-ai/console-core/schema/user.sql.js" +import { Workspace } from "@opencoder-ai/console-core/workspace.js" import { Dropdown, DropdownItem } from "~/component/dropdown" import { Modal } from "~/component/modal" import { useI18n } from "~/context/i18n" diff --git a/packages/console/app/src/routes/workspace.tsx b/packages/console/app/src/routes/workspace.tsx index 10e503ac526d..fcc92169ed1e 100644 --- a/packages/console/app/src/routes/workspace.tsx +++ b/packages/console/app/src/routes/workspace.tsx @@ -4,8 +4,8 @@ import { IconWorkspaceLogo } from "../component/icon" import { WorkspacePicker } from "./workspace-picker" import { UserMenu } from "./user-menu" import { withActor } from "~/context/auth.withActor" -import { User } from "@opencode-ai/console-core/user.js" -import { Actor } from "@opencode-ai/console-core/actor.js" +import { User } from "@opencoder-ai/console-core/user.js" +import { Actor } from "@opencoder-ai/console-core/actor.js" import { useLanguage } from "~/context/language" const getUserEmail = query(async (workspaceID: string) => { diff --git a/packages/console/app/src/routes/workspace/[id]/billing/billing-section.tsx b/packages/console/app/src/routes/workspace/[id]/billing/billing-section.tsx index db89a1c9edab..dde2e8f5cd5b 100644 --- a/packages/console/app/src/routes/workspace/[id]/billing/billing-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/billing/billing-section.tsx @@ -1,7 +1,7 @@ import { action, useParams, useAction, createAsync, useSubmission, json } from "@solidjs/router" import { createMemo, Match, Show, Switch, createEffect } from "solid-js" import { createStore } from "solid-js/store" -import { Billing } from "@opencode-ai/console-core/billing.js" +import { Billing } from "@opencoder-ai/console-core/billing.js" import { withActor } from "~/context/auth.withActor" import { IconCreditCard, IconStripe } from "~/component/icon" import styles from "./billing-section.module.css" diff --git a/packages/console/app/src/routes/workspace/[id]/billing/black-section.tsx b/packages/console/app/src/routes/workspace/[id]/billing/black-section.tsx index ce0eb2c6a12b..352ae2db16df 100644 --- a/packages/console/app/src/routes/workspace/[id]/billing/black-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/billing/black-section.tsx @@ -1,11 +1,11 @@ import { action, useParams, useAction, useSubmission, json, query, createAsync } from "@solidjs/router" import { createStore } from "solid-js/store" import { Show } from "solid-js" -import { Billing } from "@opencode-ai/console-core/billing.js" -import { Database, eq, and, isNull, sql } from "@opencode-ai/console-core/drizzle/index.js" -import { BillingTable, SubscriptionTable } from "@opencode-ai/console-core/schema/billing.sql.js" -import { Actor } from "@opencode-ai/console-core/actor.js" -import { Black } from "@opencode-ai/console-core/black.js" +import { Billing } from "@opencoder-ai/console-core/billing.js" +import { Database, eq, and, isNull, sql } from "@opencoder-ai/console-core/drizzle/index.js" +import { BillingTable, SubscriptionTable } from "@opencoder-ai/console-core/schema/billing.sql.js" +import { Actor } from "@opencoder-ai/console-core/actor.js" +import { Black } from "@opencoder-ai/console-core/black.js" import { withActor } from "~/context/auth.withActor" import { queryBillingInfo } from "../../common" import styles from "./black-section.module.css" diff --git a/packages/console/app/src/routes/workspace/[id]/billing/monthly-limit-section.tsx b/packages/console/app/src/routes/workspace/[id]/billing/monthly-limit-section.tsx index ef54b840998c..16b9c6f40eb6 100644 --- a/packages/console/app/src/routes/workspace/[id]/billing/monthly-limit-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/billing/monthly-limit-section.tsx @@ -2,7 +2,7 @@ import { json, action, useParams, createAsync, useSubmission } from "@solidjs/ro import { createEffect, Show } from "solid-js" import { createStore } from "solid-js/store" import { withActor } from "~/context/auth.withActor" -import { Billing } from "@opencode-ai/console-core/billing.js" +import { Billing } from "@opencoder-ai/console-core/billing.js" import styles from "./monthly-limit-section.module.css" import { queryBillingInfo } from "../../common" import { useI18n } from "~/context/i18n" diff --git a/packages/console/app/src/routes/workspace/[id]/billing/payment-section.tsx b/packages/console/app/src/routes/workspace/[id]/billing/payment-section.tsx index 2311be321582..232b4c8b30f0 100644 --- a/packages/console/app/src/routes/workspace/[id]/billing/payment-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/billing/payment-section.tsx @@ -1,4 +1,4 @@ -import { Billing } from "@opencode-ai/console-core/billing.js" +import { Billing } from "@opencoder-ai/console-core/billing.js" import { query, action, useParams, createAsync, useAction } from "@solidjs/router" import { For, Match, Show, Switch } from "solid-js" import { withActor } from "~/context/auth.withActor" diff --git a/packages/console/app/src/routes/workspace/[id]/billing/reload-section.tsx b/packages/console/app/src/routes/workspace/[id]/billing/reload-section.tsx index 7084be133843..634d18d1eb59 100644 --- a/packages/console/app/src/routes/workspace/[id]/billing/reload-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/billing/reload-section.tsx @@ -2,9 +2,9 @@ import { json, action, useParams, createAsync, useSubmission } from "@solidjs/ro import { createEffect, Show, createMemo } from "solid-js" import { createStore } from "solid-js/store" import { withActor } from "~/context/auth.withActor" -import { Billing } from "@opencode-ai/console-core/billing.js" -import { Database, eq } from "@opencode-ai/console-core/drizzle/index.js" -import { BillingTable } from "@opencode-ai/console-core/schema/billing.sql.js" +import { Billing } from "@opencoder-ai/console-core/billing.js" +import { Database, eq } from "@opencoder-ai/console-core/drizzle/index.js" +import { BillingTable } from "@opencoder-ai/console-core/schema/billing.sql.js" import styles from "./reload-section.module.css" import { queryBillingInfo } from "../../common" import { useI18n } from "~/context/i18n" diff --git a/packages/console/app/src/routes/workspace/[id]/graph-section.tsx b/packages/console/app/src/routes/workspace/[id]/graph-section.tsx index f26c7291d8ab..b3d92cc2143a 100644 --- a/packages/console/app/src/routes/workspace/[id]/graph-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/graph-section.tsx @@ -1,8 +1,8 @@ -import { and, Database, eq, gte, inArray, isNull, lt, or, sql, sum } from "@opencode-ai/console-core/drizzle/index.js" -import { UsageTable } from "@opencode-ai/console-core/schema/billing.sql.js" -import { KeyTable } from "@opencode-ai/console-core/schema/key.sql.js" -import { UserTable } from "@opencode-ai/console-core/schema/user.sql.js" -import { AuthTable } from "@opencode-ai/console-core/schema/auth.sql.js" +import { and, Database, eq, gte, inArray, isNull, lt, or, sql, sum } from "@opencoder-ai/console-core/drizzle/index.js" +import { UsageTable } from "@opencoder-ai/console-core/schema/billing.sql.js" +import { KeyTable } from "@opencoder-ai/console-core/schema/key.sql.js" +import { UserTable } from "@opencoder-ai/console-core/schema/user.sql.js" +import { AuthTable } from "@opencoder-ai/console-core/schema/auth.sql.js" import { useParams } from "@solidjs/router" import { createEffect, createMemo, onCleanup, Show, For } from "solid-js" import { createStore } from "solid-js/store" diff --git a/packages/console/app/src/routes/workspace/[id]/keys/key-section.tsx b/packages/console/app/src/routes/workspace/[id]/keys/key-section.tsx index 837ab743a5ac..98becedec247 100644 --- a/packages/console/app/src/routes/workspace/[id]/keys/key-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/keys/key-section.tsx @@ -1,12 +1,12 @@ import { json, query, action, useParams, createAsync, useSubmission } from "@solidjs/router" import { createEffect, createSignal, For, Show } from "solid-js" import { IconCopy, IconCheck } from "~/component/icon" -import { Key } from "@opencode-ai/console-core/key.js" +import { Key } from "@opencoder-ai/console-core/key.js" import { withActor } from "~/context/auth.withActor" import { createStore } from "solid-js/store" import { formatDateUTC, formatDateForTable } from "../../common" import styles from "./key-section.module.css" -import { Actor } from "@opencode-ai/console-core/actor.js" +import { Actor } from "@opencoder-ai/console-core/actor.js" import { useI18n } from "~/context/i18n" import { formError, localizeError } from "~/lib/form-error" diff --git a/packages/console/app/src/routes/workspace/[id]/members/member-section.tsx b/packages/console/app/src/routes/workspace/[id]/members/member-section.tsx index 5a440632f8ad..77be6d5ea4aa 100644 --- a/packages/console/app/src/routes/workspace/[id]/members/member-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/members/member-section.tsx @@ -3,9 +3,9 @@ import { createEffect, For, Show } from "solid-js" import { withActor } from "~/context/auth.withActor" import { createStore } from "solid-js/store" import styles from "./member-section.module.css" -import { UserRole } from "@opencode-ai/console-core/schema/user.sql.js" -import { Actor } from "@opencode-ai/console-core/actor.js" -import { User } from "@opencode-ai/console-core/user.js" +import { UserRole } from "@opencoder-ai/console-core/schema/user.sql.js" +import { Actor } from "@opencoder-ai/console-core/actor.js" +import { User } from "@opencoder-ai/console-core/user.js" import { RoleDropdown } from "./role-dropdown" import { useI18n } from "~/context/i18n" import { useLanguage } from "~/context/language" diff --git a/packages/console/app/src/routes/workspace/[id]/model-section.tsx b/packages/console/app/src/routes/workspace/[id]/model-section.tsx index 97f95278a160..837b1d6e4276 100644 --- a/packages/console/app/src/routes/workspace/[id]/model-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/model-section.tsx @@ -1,8 +1,8 @@ -import { Model } from "@opencode-ai/console-core/model.js" +import { Model } from "@opencoder-ai/console-core/model.js" import { query, action, useParams, createAsync, json } from "@solidjs/router" import { createMemo, For, Show } from "solid-js" import { withActor } from "~/context/auth.withActor" -import { ZenData } from "@opencode-ai/console-core/model.js" +import { ZenData } from "@opencoder-ai/console-core/model.js" import styles from "./model-section.module.css" import { querySessionInfo } from "../common" import { diff --git a/packages/console/app/src/routes/workspace/[id]/new-user-section.tsx b/packages/console/app/src/routes/workspace/[id]/new-user-section.tsx index a50efc288d6e..d1eb4d47df50 100644 --- a/packages/console/app/src/routes/workspace/[id]/new-user-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/new-user-section.tsx @@ -1,8 +1,8 @@ import { query, useParams, createAsync } from "@solidjs/router" import { createMemo, createSignal, Show } from "solid-js" import { IconCopy, IconCheck } from "~/component/icon" -import { Key } from "@opencode-ai/console-core/key.js" -import { Billing } from "@opencode-ai/console-core/billing.js" +import { Key } from "@opencoder-ai/console-core/key.js" +import { Billing } from "@opencoder-ai/console-core/billing.js" import { withActor } from "~/context/auth.withActor" import styles from "./new-user-section.module.css" import { useI18n } from "~/context/i18n" diff --git a/packages/console/app/src/routes/workspace/[id]/provider-section.tsx b/packages/console/app/src/routes/workspace/[id]/provider-section.tsx index fe04bf7c0242..558dafd8382a 100644 --- a/packages/console/app/src/routes/workspace/[id]/provider-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/provider-section.tsx @@ -1,6 +1,6 @@ import { json, query, action, useParams, createAsync, useSubmission } from "@solidjs/router" import { createEffect, For, Show } from "solid-js" -import { Provider } from "@opencode-ai/console-core/provider.js" +import { Provider } from "@opencoder-ai/console-core/provider.js" import { withActor } from "~/context/auth.withActor" import { createStore } from "solid-js/store" import styles from "./provider-section.module.css" diff --git a/packages/console/app/src/routes/workspace/[id]/settings/settings-section.tsx b/packages/console/app/src/routes/workspace/[id]/settings/settings-section.tsx index 5e8331e2682c..3ec38a411e78 100644 --- a/packages/console/app/src/routes/workspace/[id]/settings/settings-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/settings/settings-section.tsx @@ -2,10 +2,10 @@ import { json, action, useParams, useSubmission, createAsync, query } from "@sol import { createEffect, Show } from "solid-js" import { createStore } from "solid-js/store" import { withActor } from "~/context/auth.withActor" -import { Workspace } from "@opencode-ai/console-core/workspace.js" +import { Workspace } from "@opencoder-ai/console-core/workspace.js" import styles from "./settings-section.module.css" -import { Database, eq } from "@opencode-ai/console-core/drizzle/index.js" -import { WorkspaceTable } from "@opencode-ai/console-core/schema/workspace.sql.js" +import { Database, eq } from "@opencoder-ai/console-core/drizzle/index.js" +import { WorkspaceTable } from "@opencoder-ai/console-core/schema/workspace.sql.js" import { useI18n } from "~/context/i18n" import { formError, localizeError } from "~/lib/form-error" diff --git a/packages/console/app/src/routes/workspace/[id]/usage-section.tsx b/packages/console/app/src/routes/workspace/[id]/usage-section.tsx index 079a27c3ca79..b30a98256b36 100644 --- a/packages/console/app/src/routes/workspace/[id]/usage-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/usage-section.tsx @@ -1,4 +1,4 @@ -import { Billing } from "@opencode-ai/console-core/billing.js" +import { Billing } from "@opencoder-ai/console-core/billing.js" import { createAsync, query, useParams } from "@solidjs/router" import { createMemo, For, Show, createEffect, createSignal } from "solid-js" import { formatDateUTC, formatDateForTable } from "../common" diff --git a/packages/console/app/src/routes/workspace/common.tsx b/packages/console/app/src/routes/workspace/common.tsx index 5cbd67183516..8cc8ebcb9f3e 100644 --- a/packages/console/app/src/routes/workspace/common.tsx +++ b/packages/console/app/src/routes/workspace/common.tsx @@ -1,11 +1,11 @@ -import { Resource } from "@opencode-ai/console-resource" -import { Actor } from "@opencode-ai/console-core/actor.js" +import { Resource } from "@opencoder-ai/console-resource" +import { Actor } from "@opencoder-ai/console-core/actor.js" import { action, json, query } from "@solidjs/router" import { withActor } from "~/context/auth.withActor" -import { Billing } from "@opencode-ai/console-core/billing.js" -import { and, Database, desc, eq, isNull } from "@opencode-ai/console-core/drizzle/index.js" -import { WorkspaceTable } from "@opencode-ai/console-core/schema/workspace.sql.js" -import { UserTable } from "@opencode-ai/console-core/schema/user.sql.js" +import { Billing } from "@opencoder-ai/console-core/billing.js" +import { and, Database, desc, eq, isNull } from "@opencoder-ai/console-core/drizzle/index.js" +import { WorkspaceTable } from "@opencoder-ai/console-core/schema/workspace.sql.js" +import { UserTable } from "@opencoder-ai/console-core/schema/user.sql.js" export function formatDateForTable(date: Date) { const options: Intl.DateTimeFormatOptions = { diff --git a/packages/console/app/src/routes/zen/util/dataDumper.ts b/packages/console/app/src/routes/zen/util/dataDumper.ts index b852ca0b5c0c..154391ff4cd2 100644 --- a/packages/console/app/src/routes/zen/util/dataDumper.ts +++ b/packages/console/app/src/routes/zen/util/dataDumper.ts @@ -1,4 +1,4 @@ -import { Resource, waitUntil } from "@opencode-ai/console-resource" +import { Resource, waitUntil } from "@opencoder-ai/console-resource" export function createDataDumper(sessionId: string, requestId: string, projectId: string) { if (Resource.App.stage !== "production") return diff --git a/packages/console/app/src/routes/zen/util/handler.ts b/packages/console/app/src/routes/zen/util/handler.ts index d2bcaa851b2d..5b5a19fc101d 100644 --- a/packages/console/app/src/routes/zen/util/handler.ts +++ b/packages/console/app/src/routes/zen/util/handler.ts @@ -1,18 +1,18 @@ import type { APIEvent } from "@solidjs/start/server" -import { and, Database, eq, isNull, lt, or, sql } from "@opencode-ai/console-core/drizzle/index.js" -import { KeyTable } from "@opencode-ai/console-core/schema/key.sql.js" -import { BillingTable, SubscriptionTable, UsageTable } from "@opencode-ai/console-core/schema/billing.sql.js" -import { centsToMicroCents } from "@opencode-ai/console-core/util/price.js" -import { getWeekBounds } from "@opencode-ai/console-core/util/date.js" -import { Identifier } from "@opencode-ai/console-core/identifier.js" -import { Billing } from "@opencode-ai/console-core/billing.js" -import { Actor } from "@opencode-ai/console-core/actor.js" -import { WorkspaceTable } from "@opencode-ai/console-core/schema/workspace.sql.js" -import { ZenData } from "@opencode-ai/console-core/model.js" -import { Black, BlackData } from "@opencode-ai/console-core/black.js" -import { UserTable } from "@opencode-ai/console-core/schema/user.sql.js" -import { ModelTable } from "@opencode-ai/console-core/schema/model.sql.js" -import { ProviderTable } from "@opencode-ai/console-core/schema/provider.sql.js" +import { and, Database, eq, isNull, lt, or, sql } from "@opencoder-ai/console-core/drizzle/index.js" +import { KeyTable } from "@opencoder-ai/console-core/schema/key.sql.js" +import { BillingTable, SubscriptionTable, UsageTable } from "@opencoder-ai/console-core/schema/billing.sql.js" +import { centsToMicroCents } from "@opencoder-ai/console-core/util/price.js" +import { getWeekBounds } from "@opencoder-ai/console-core/util/date.js" +import { Identifier } from "@opencoder-ai/console-core/identifier.js" +import { Billing } from "@opencoder-ai/console-core/billing.js" +import { Actor } from "@opencoder-ai/console-core/actor.js" +import { WorkspaceTable } from "@opencoder-ai/console-core/schema/workspace.sql.js" +import { ZenData } from "@opencoder-ai/console-core/model.js" +import { Black, BlackData } from "@opencoder-ai/console-core/black.js" +import { UserTable } from "@opencoder-ai/console-core/schema/user.sql.js" +import { ModelTable } from "@opencoder-ai/console-core/schema/model.sql.js" +import { ProviderTable } from "@opencoder-ai/console-core/schema/provider.sql.js" import { logger } from "./logger" import { AuthError, diff --git a/packages/console/app/src/routes/zen/util/logger.ts b/packages/console/app/src/routes/zen/util/logger.ts index aef46ddd0e61..6c9f54f9d822 100644 --- a/packages/console/app/src/routes/zen/util/logger.ts +++ b/packages/console/app/src/routes/zen/util/logger.ts @@ -1,4 +1,4 @@ -import { Resource } from "@opencode-ai/console-resource" +import { Resource } from "@opencoder-ai/console-resource" export const logger = { metric: (values: Record) => { diff --git a/packages/console/app/src/routes/zen/util/provider/provider.ts b/packages/console/app/src/routes/zen/util/provider/provider.ts index 5f8b631cf089..f9df0ddab8ff 100644 --- a/packages/console/app/src/routes/zen/util/provider/provider.ts +++ b/packages/console/app/src/routes/zen/util/provider/provider.ts @@ -1,4 +1,4 @@ -import { ZenData } from "@opencode-ai/console-core/model.js" +import { ZenData } from "@opencoder-ai/console-core/model.js" import { fromAnthropicChunk, fromAnthropicRequest, diff --git a/packages/console/app/src/routes/zen/util/stickyProviderTracker.ts b/packages/console/app/src/routes/zen/util/stickyProviderTracker.ts index 8029757c5b61..3cd81bf996fb 100644 --- a/packages/console/app/src/routes/zen/util/stickyProviderTracker.ts +++ b/packages/console/app/src/routes/zen/util/stickyProviderTracker.ts @@ -1,4 +1,4 @@ -import { Resource } from "@opencode-ai/console-resource" +import { Resource } from "@opencoder-ai/console-resource" export function createStickyTracker(stickyProvider: "strict" | "prefer" | undefined, session: string) { if (!stickyProvider) return diff --git a/packages/console/app/src/routes/zen/util/trialLimiter.ts b/packages/console/app/src/routes/zen/util/trialLimiter.ts index 531e5cf0c302..60dff9f05695 100644 --- a/packages/console/app/src/routes/zen/util/trialLimiter.ts +++ b/packages/console/app/src/routes/zen/util/trialLimiter.ts @@ -1,7 +1,7 @@ -import { Database, eq, sql } from "@opencode-ai/console-core/drizzle/index.js" -import { IpTable } from "@opencode-ai/console-core/schema/ip.sql.js" +import { Database, eq, sql } from "@opencoder-ai/console-core/drizzle/index.js" +import { IpTable } from "@opencoder-ai/console-core/schema/ip.sql.js" import { UsageInfo } from "./provider/provider" -import { ZenData } from "@opencode-ai/console-core/model.js" +import { ZenData } from "@opencoder-ai/console-core/model.js" export function createTrialLimiter(trial: ZenData.Trial | undefined, ip: string, client: string) { if (!trial) return diff --git a/packages/console/app/src/routes/zen/v1/models.ts b/packages/console/app/src/routes/zen/v1/models.ts index ee2b3ab5416e..59a8d8129577 100644 --- a/packages/console/app/src/routes/zen/v1/models.ts +++ b/packages/console/app/src/routes/zen/v1/models.ts @@ -1,9 +1,9 @@ import type { APIEvent } from "@solidjs/start/server" -import { and, Database, eq, isNull } from "@opencode-ai/console-core/drizzle/index.js" -import { KeyTable } from "@opencode-ai/console-core/schema/key.sql.js" -import { WorkspaceTable } from "@opencode-ai/console-core/schema/workspace.sql.js" -import { ModelTable } from "@opencode-ai/console-core/schema/model.sql.js" -import { ZenData } from "@opencode-ai/console-core/model.js" +import { and, Database, eq, isNull } from "@opencoder-ai/console-core/drizzle/index.js" +import { KeyTable } from "@opencoder-ai/console-core/schema/key.sql.js" +import { WorkspaceTable } from "@opencoder-ai/console-core/schema/workspace.sql.js" +import { ModelTable } from "@opencoder-ai/console-core/schema/model.sql.js" +import { ZenData } from "@opencoder-ai/console-core/model.js" export async function OPTIONS(input: APIEvent) { return new Response(null, { diff --git a/packages/console/core/package.json b/packages/console/core/package.json index 0676595c709a..9f3ceccee79c 100644 --- a/packages/console/core/package.json +++ b/packages/console/core/package.json @@ -1,15 +1,15 @@ { "$schema": "https://json.schemastore.org/package.json", - "name": "@opencode-ai/console-core", - "version": "1.1.65", + "name": "@opencoder-ai/console-core", + "version": "1.1.63", "private": true, "type": "module", "license": "MIT", "dependencies": { "@aws-sdk/client-sts": "3.782.0", "@jsx-email/render": "1.1.1", - "@opencode-ai/console-mail": "workspace:*", - "@opencode-ai/console-resource": "workspace:*", + "@opencoder-ai/console-mail": "workspace:*", + "@opencoder-ai/console-resource": "workspace:*", "@planetscale/database": "1.19.0", "aws4fetch": "1.0.20", "drizzle-orm": "0.41.0", diff --git a/packages/console/core/script/reset-db.ts b/packages/console/core/script/reset-db.ts index 02d498901763..21ae97ab2cc5 100644 --- a/packages/console/core/script/reset-db.ts +++ b/packages/console/core/script/reset-db.ts @@ -1,4 +1,4 @@ -import { Resource } from "@opencode-ai/console-resource" +import { Resource } from "@opencoder-ai/console-resource" import { Database } from "../src/drizzle/index.js" import { UserTable } from "../src/schema/user.sql.js" import { AccountTable } from "../src/schema/account.sql.js" diff --git a/packages/console/core/src/aws.ts b/packages/console/core/src/aws.ts index a4c1510862c3..138dd3d67a98 100644 --- a/packages/console/core/src/aws.ts +++ b/packages/console/core/src/aws.ts @@ -1,5 +1,5 @@ import { z } from "zod" -import { Resource } from "@opencode-ai/console-resource" +import { Resource } from "@opencoder-ai/console-resource" import { AwsClient } from "aws4fetch" import { fn } from "./util/fn" diff --git a/packages/console/core/src/billing.ts b/packages/console/core/src/billing.ts index 2c1cdb0687bb..d6fdfcd2c613 100644 --- a/packages/console/core/src/billing.ts +++ b/packages/console/core/src/billing.ts @@ -4,7 +4,7 @@ import { BillingTable, PaymentTable, SubscriptionTable, UsageTable } from "./sch import { Actor } from "./actor" import { fn } from "./util/fn" import { z } from "zod" -import { Resource } from "@opencode-ai/console-resource" +import { Resource } from "@opencoder-ai/console-resource" import { Identifier } from "./identifier" import { centsToMicroCents } from "./util/price" import { User } from "./user" diff --git a/packages/console/core/src/black.ts b/packages/console/core/src/black.ts index 5f8db62738db..438ebfd7a351 100644 --- a/packages/console/core/src/black.ts +++ b/packages/console/core/src/black.ts @@ -1,6 +1,6 @@ import { z } from "zod" import { fn } from "./util/fn" -import { Resource } from "@opencode-ai/console-resource" +import { Resource } from "@opencoder-ai/console-resource" import { centsToMicroCents } from "./util/price" import { getWeekBounds } from "./util/date" import { SubscriptionPlan } from "./schema/billing.sql" diff --git a/packages/console/core/src/drizzle/index.ts b/packages/console/core/src/drizzle/index.ts index f0f065de4a53..f7ede1d4f28b 100644 --- a/packages/console/core/src/drizzle/index.ts +++ b/packages/console/core/src/drizzle/index.ts @@ -1,5 +1,5 @@ import { drizzle } from "drizzle-orm/planetscale-serverless" -import { Resource } from "@opencode-ai/console-resource" +import { Resource } from "@opencoder-ai/console-resource" export * from "drizzle-orm" import { Client } from "@planetscale/database" diff --git a/packages/console/core/src/model.ts b/packages/console/core/src/model.ts index 9a2908e32e3a..b7b2ec5fcfcb 100644 --- a/packages/console/core/src/model.ts +++ b/packages/console/core/src/model.ts @@ -5,7 +5,7 @@ import { ModelTable } from "./schema/model.sql" import { Identifier } from "./identifier" import { fn } from "./util/fn" import { Actor } from "./actor" -import { Resource } from "@opencode-ai/console-resource" +import { Resource } from "@opencoder-ai/console-resource" export namespace ZenData { const FormatSchema = z.enum(["anthropic", "google", "openai", "oa-compat"]) diff --git a/packages/console/core/src/user.ts b/packages/console/core/src/user.ts index 8b7a96f443ef..03a073ddef91 100644 --- a/packages/console/core/src/user.ts +++ b/packages/console/core/src/user.ts @@ -138,7 +138,7 @@ export namespace User { .then((rows) => rows[0]), ) - const { InviteEmail } = await import("@opencode-ai/console-mail/InviteEmail.jsx") + const { InviteEmail } = await import("@opencoder-ai/console-mail/InviteEmail.jsx") await AWS.sendEmail({ to: email, subject: `You've been invited to join the ${emailInfo.workspaceName} workspace on OpenCode`, diff --git a/packages/console/function/package.json b/packages/console/function/package.json index 265546fc7f75..b91b5826c38a 100644 --- a/packages/console/function/package.json +++ b/packages/console/function/package.json @@ -1,6 +1,6 @@ { - "name": "@opencode-ai/console-function", - "version": "1.1.65", + "name": "@opencoder-ai/console-function", + "version": "1.1.63", "$schema": "https://json.schemastore.org/package.json", "private": true, "type": "module", @@ -21,8 +21,8 @@ "@ai-sdk/openai": "2.0.2", "@ai-sdk/openai-compatible": "1.0.1", "@hono/zod-validator": "catalog:", - "@opencode-ai/console-core": "workspace:*", - "@opencode-ai/console-resource": "workspace:*", + "@opencoder-ai/console-core": "workspace:*", + "@opencoder-ai/console-resource": "workspace:*", "@openauthjs/openauth": "0.0.0-20250322224806", "ai": "catalog:", "hono": "catalog:", diff --git a/packages/console/function/src/auth.ts b/packages/console/function/src/auth.ts index c26ab215b32b..ac960ebfcad3 100644 --- a/packages/console/function/src/auth.ts +++ b/packages/console/function/src/auth.ts @@ -7,16 +7,16 @@ import { THEME_OPENAUTH } from "@openauthjs/openauth/ui/theme" import { GithubProvider } from "@openauthjs/openauth/provider/github" import { GoogleOidcProvider } from "@openauthjs/openauth/provider/google" import { CloudflareStorage } from "@openauthjs/openauth/storage/cloudflare" -import { Account } from "@opencode-ai/console-core/account.js" -import { Workspace } from "@opencode-ai/console-core/workspace.js" -import { Actor } from "@opencode-ai/console-core/actor.js" -import { Resource } from "@opencode-ai/console-resource" -import { User } from "@opencode-ai/console-core/user.js" -import { and, Database, eq, isNull, or } from "@opencode-ai/console-core/drizzle/index.js" -import { WorkspaceTable } from "@opencode-ai/console-core/schema/workspace.sql.js" -import { UserTable } from "@opencode-ai/console-core/schema/user.sql.js" -import { AuthTable } from "@opencode-ai/console-core/schema/auth.sql.js" -import { Identifier } from "@opencode-ai/console-core/identifier.js" +import { Account } from "@opencoder-ai/console-core/account.js" +import { Workspace } from "@opencoder-ai/console-core/workspace.js" +import { Actor } from "@opencoder-ai/console-core/actor.js" +import { Resource } from "@opencoder-ai/console-resource" +import { User } from "@opencoder-ai/console-core/user.js" +import { and, Database, eq, isNull, or } from "@opencoder-ai/console-core/drizzle/index.js" +import { WorkspaceTable } from "@opencoder-ai/console-core/schema/workspace.sql.js" +import { UserTable } from "@opencoder-ai/console-core/schema/user.sql.js" +import { AuthTable } from "@opencoder-ai/console-core/schema/auth.sql.js" +import { Identifier } from "@opencoder-ai/console-core/identifier.js" type Env = { AuthStorage: KVNamespace diff --git a/packages/console/function/src/log-processor.ts b/packages/console/function/src/log-processor.ts index 327fc930b72e..caffcd5f8ffa 100644 --- a/packages/console/function/src/log-processor.ts +++ b/packages/console/function/src/log-processor.ts @@ -1,4 +1,4 @@ -import { Resource } from "@opencode-ai/console-resource" +import { Resource } from "@opencoder-ai/console-resource" import type { TraceItem } from "@cloudflare/workers-types" export default { diff --git a/packages/console/mail/package.json b/packages/console/mail/package.json index 0f4bbb6eca7d..32b1edbb81b4 100644 --- a/packages/console/mail/package.json +++ b/packages/console/mail/package.json @@ -1,6 +1,6 @@ { - "name": "@opencode-ai/console-mail", - "version": "1.1.65", + "name": "@opencoder-ai/console-mail", + "version": "1.1.63", "dependencies": { "@jsx-email/all": "2.2.3", "@jsx-email/cli": "1.4.3", diff --git a/packages/console/resource/package.json b/packages/console/resource/package.json index 6e874331d248..ba6c014822c8 100644 --- a/packages/console/resource/package.json +++ b/packages/console/resource/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "name": "@opencode-ai/console-resource", + "name": "@opencoder-ai/console-resource", "license": "MIT", "dependencies": { "@cloudflare/workers-types": "catalog:" diff --git a/packages/desktop/package.json b/packages/desktop/package.json index 8e4862b30d16..1a9f6cf4a811 100644 --- a/packages/desktop/package.json +++ b/packages/desktop/package.json @@ -1,5 +1,5 @@ { - "name": "@opencode-ai/desktop", + "name": "@opencoder-ai/desktop", "private": true, "version": "1.1.65", "type": "module", @@ -13,8 +13,8 @@ "tauri": "tauri" }, "dependencies": { - "@opencode-ai/app": "workspace:*", - "@opencode-ai/ui": "workspace:*", + "@opencoder-ai/app": "workspace:*", + "@opencoder-ai/ui": "workspace:*", "@solid-primitives/i18n": "2.2.1", "@solid-primitives/storage": "catalog:", "@tauri-apps/api": "^2", diff --git a/packages/desktop/scripts/prepare.ts b/packages/desktop/scripts/prepare.ts index d802f2d89eeb..45a16e17e125 100755 --- a/packages/desktop/scripts/prepare.ts +++ b/packages/desktop/scripts/prepare.ts @@ -1,7 +1,7 @@ #!/usr/bin/env bun import { $ } from "bun" -import { Script } from "@opencode-ai/script" +import { Script } from "@opencoder-ai/script" import { copyBinaryToSidecarFolder, getCurrentSidecar, windowsify } from "./utils" const pkg = await Bun.file("./package.json").json() diff --git a/packages/desktop/src/index.tsx b/packages/desktop/src/index.tsx index ff0a093766ed..e63a8d8f999c 100644 --- a/packages/desktop/src/index.tsx +++ b/packages/desktop/src/index.tsx @@ -6,9 +6,9 @@ import { AppInterface, PlatformProvider, Platform, + DisplayBackend, useCommand, - handleNotificationClick, -} from "@opencode-ai/app" +} from "@opencoder-ai/app" import { open, save } from "@tauri-apps/plugin-dialog" import { getCurrent, onOpenUrl } from "@tauri-apps/plugin-deep-link" import { openPath as openerOpenPath } from "@tauri-apps/plugin-opener" @@ -21,7 +21,7 @@ import { relaunch } from "@tauri-apps/plugin-process" import { AsyncStorage } from "@solid-primitives/storage" import { fetch as tauriFetch } from "@tauri-apps/plugin-http" import { Store } from "@tauri-apps/plugin-store" -import { Splash } from "@opencode-ai/ui/logo" +import { Splash } from "@opencoder-ai/ui/logo" import { createSignal, Show, Accessor, JSX, createResource, onMount, onCleanup } from "solid-js" import { readImage } from "@tauri-apps/plugin-clipboard-manager" @@ -336,7 +336,10 @@ const createPlatform = (password: Accessor): Platform => { void win.show().catch(() => undefined) void win.unminimize().catch(() => undefined) void win.setFocus().catch(() => undefined) - handleNotificationClick(href) + if (href) { + window.history.pushState(null, "", href) + window.dispatchEvent(new PopStateEvent("popstate")) + } notification.close() } }) diff --git a/packages/desktop/vite.config.ts b/packages/desktop/vite.config.ts index 62c3a099adeb..eb3a3dae5524 100644 --- a/packages/desktop/vite.config.ts +++ b/packages/desktop/vite.config.ts @@ -1,5 +1,5 @@ import { defineConfig } from "vite" -import appPlugin from "@opencode-ai/app/vite" +import appPlugin from "@opencoder-ai/app/vite" const host = process.env.TAURI_DEV_HOST diff --git a/packages/docs/docs.json b/packages/docs/docs.json index 1bf8b3700b93..2ade74281706 100644 --- a/packages/docs/docs.json +++ b/packages/docs/docs.json @@ -1,7 +1,7 @@ { "$schema": "https://mintlify.com/docs.json", "theme": "mint", - "name": "@opencode-ai/docs", + "name": "@opencoder-ai/docs", "colors": { "primary": "#16A34A", "light": "#07C983", diff --git a/packages/enterprise/package.json b/packages/enterprise/package.json index bd2fac19f762..452d3a7c97eb 100644 --- a/packages/enterprise/package.json +++ b/packages/enterprise/package.json @@ -1,6 +1,6 @@ { - "name": "@opencode-ai/enterprise", - "version": "1.1.65", + "name": "@opencoder-ai/enterprise", + "version": "1.1.63", "private": true, "type": "module", "license": "MIT", @@ -13,8 +13,8 @@ "shell-prod": "sst shell --target Teams --stage production" }, "dependencies": { - "@opencode-ai/util": "workspace:*", - "@opencode-ai/ui": "workspace:*", + "@opencoder-ai/util": "workspace:*", + "@opencoder-ai/ui": "workspace:*", "aws4fetch": "^1.0.20", "@pierre/diffs": "catalog:", "@solidjs/router": "catalog:", diff --git a/packages/enterprise/src/app.css b/packages/enterprise/src/app.css index 4af87bca632a..e3d82c978efc 100644 --- a/packages/enterprise/src/app.css +++ b/packages/enterprise/src/app.css @@ -1 +1 @@ -@import "@opencode-ai/ui/styles/tailwind"; +@import "@opencoder-ai/ui/styles/tailwind"; diff --git a/packages/enterprise/src/app.tsx b/packages/enterprise/src/app.tsx index 6f9cdcafb893..ab72ed8c5c5c 100644 --- a/packages/enterprise/src/app.tsx +++ b/packages/enterprise/src/app.tsx @@ -1,16 +1,16 @@ import { Router } from "@solidjs/router" import { FileRoutes } from "@solidjs/start/router" -import { Font } from "@opencode-ai/ui/font" +import { Font } from "@opencoder-ai/ui/font" import { MetaProvider } from "@solidjs/meta" -import { MarkedProvider } from "@opencode-ai/ui/context/marked" -import { DialogProvider } from "@opencode-ai/ui/context/dialog" -import { I18nProvider, type UiI18nParams } from "@opencode-ai/ui/context" -import { dict as uiEn } from "@opencode-ai/ui/i18n/en" -import { dict as uiZh } from "@opencode-ai/ui/i18n/zh" +import { MarkedProvider } from "@opencoder-ai/ui/context/marked" +import { DialogProvider } from "@opencoder-ai/ui/context/dialog" +import { I18nProvider, type UiI18nParams } from "@opencoder-ai/ui/context" +import { dict as uiEn } from "@opencoder-ai/ui/i18n/en" +import { dict as uiZh } from "@opencoder-ai/ui/i18n/zh" import { createEffect, createMemo, Suspense, type ParentProps } from "solid-js" import { getRequestEvent } from "solid-js/web" import "./app.css" -import { Favicon } from "@opencode-ai/ui/favicon" +import { Favicon } from "@opencoder-ai/ui/favicon" function resolveTemplate(text: string, params?: UiI18nParams) { if (!params) return text diff --git a/packages/enterprise/src/core/share.ts b/packages/enterprise/src/core/share.ts index d7f5c8b8d523..dd2f0d78c7ac 100644 --- a/packages/enterprise/src/core/share.ts +++ b/packages/enterprise/src/core/share.ts @@ -1,10 +1,10 @@ -import { FileDiff, Message, Model, Part, Session } from "@opencode-ai/sdk/v2" -import { fn } from "@opencode-ai/util/fn" -import { iife } from "@opencode-ai/util/iife" -import { Identifier } from "@opencode-ai/util/identifier" +import { FileDiff, Message, Model, Part, Session } from "@opencoder-ai/sdk/v2" +import { fn } from "@opencoder-ai/util/fn" +import { iife } from "@opencoder-ai/util/iife" +import { Identifier } from "@opencoder-ai/util/identifier" import z from "zod" import { Storage } from "./storage" -import { Binary } from "@opencode-ai/util/binary" +import { Binary } from "@opencoder-ai/util/binary" export namespace Share { export const Info = z.object({ diff --git a/packages/enterprise/src/core/storage.ts b/packages/enterprise/src/core/storage.ts index b8030b4f901a..2644b1f08e31 100644 --- a/packages/enterprise/src/core/storage.ts +++ b/packages/enterprise/src/core/storage.ts @@ -1,5 +1,5 @@ import { AwsClient } from "aws4fetch" -import { lazy } from "@opencode-ai/util/lazy" +import { lazy } from "@opencoder-ai/util/lazy" export namespace Storage { export interface Adapter { diff --git a/packages/enterprise/src/routes/share/[shareID].tsx b/packages/enterprise/src/routes/share/[shareID].tsx index a2607891c8a7..340757cfc523 100644 --- a/packages/enterprise/src/routes/share/[shareID].tsx +++ b/packages/enterprise/src/routes/share/[shareID].tsx @@ -1,37 +1,37 @@ -import { FileDiff, Message, Model, Part, Session, SessionStatus, UserMessage } from "@opencode-ai/sdk/v2" -import { SessionTurn } from "@opencode-ai/ui/session-turn" -import { SessionReview } from "@opencode-ai/ui/session-review" -import { DataProvider } from "@opencode-ai/ui/context" -import { DiffComponentProvider } from "@opencode-ai/ui/context/diff" -import { CodeComponentProvider } from "@opencode-ai/ui/context/code" -import { WorkerPoolProvider } from "@opencode-ai/ui/context/worker-pool" +import { FileDiff, Message, Model, Part, Session, SessionStatus, UserMessage } from "@opencoder-ai/sdk/v2" +import { SessionTurn } from "@opencoder-ai/ui/session-turn" +import { SessionReview } from "@opencoder-ai/ui/session-review" +import { DataProvider } from "@opencoder-ai/ui/context" +import { DiffComponentProvider } from "@opencoder-ai/ui/context/diff" +import { CodeComponentProvider } from "@opencoder-ai/ui/context/code" +import { WorkerPoolProvider } from "@opencoder-ai/ui/context/worker-pool" import { createAsync, query, useParams } from "@solidjs/router" import { createEffect, createMemo, ErrorBoundary, For, Match, Show, Switch } from "solid-js" import { Share } from "~/core/share" -import { Logo, Mark } from "@opencode-ai/ui/logo" -import { IconButton } from "@opencode-ai/ui/icon-button" -import { ProviderIcon } from "@opencode-ai/ui/provider-icon" -import { createDefaultOptions } from "@opencode-ai/ui/pierre" -import { iife } from "@opencode-ai/util/iife" -import { Binary } from "@opencode-ai/util/binary" -import { NamedError } from "@opencode-ai/util/error" +import { Logo, Mark } from "@opencoder-ai/ui/logo" +import { IconButton } from "@opencoder-ai/ui/icon-button" +import { ProviderIcon } from "@opencoder-ai/ui/provider-icon" +import { createDefaultOptions } from "@opencoder-ai/ui/pierre" +import { iife } from "@opencoder-ai/util/iife" +import { Binary } from "@opencoder-ai/util/binary" +import { NamedError } from "@opencoder-ai/util/error" import { DateTime } from "luxon" import { createStore } from "solid-js/store" import z from "zod" import NotFound from "../[...404]" -import { Tabs } from "@opencode-ai/ui/tabs" -import { MessageNav } from "@opencode-ai/ui/message-nav" +import { Tabs } from "@opencoder-ai/ui/tabs" +import { MessageNav } from "@opencoder-ai/ui/message-nav" import { preloadMultiFileDiff, PreloadMultiFileDiffResult } from "@pierre/diffs/ssr" -import { Diff as SSRDiff } from "@opencode-ai/ui/diff-ssr" +import { Diff as SSRDiff } from "@opencoder-ai/ui/diff-ssr" import { clientOnly } from "@solidjs/start" -import { type IconName } from "@opencode-ai/ui/icons/provider" +import { type IconName } from "@opencoder-ai/ui/icons/provider" import { Meta, Title } from "@solidjs/meta" import { Base64 } from "js-base64" -const ClientOnlyDiff = clientOnly(() => import("@opencode-ai/ui/diff").then((m) => ({ default: m.Diff }))) -const ClientOnlyCode = clientOnly(() => import("@opencode-ai/ui/code").then((m) => ({ default: m.Code }))) +const ClientOnlyDiff = clientOnly(() => import("@opencoder-ai/ui/diff").then((m) => ({ default: m.Diff }))) +const ClientOnlyCode = clientOnly(() => import("@opencoder-ai/ui/code").then((m) => ({ default: m.Code }))) const ClientOnlyWorkerPoolProvider = clientOnly(() => - import("@opencode-ai/ui/pierre/worker").then((m) => ({ + import("@opencoder-ai/ui/pierre/worker").then((m) => ({ default: (props: { children: any }) => ( {props.children} ), diff --git a/packages/enterprise/test/core/share.test.ts b/packages/enterprise/test/core/share.test.ts index 9e9c06db3841..56c671ded97b 100644 --- a/packages/enterprise/test/core/share.test.ts +++ b/packages/enterprise/test/core/share.test.ts @@ -1,7 +1,7 @@ import { describe, expect, test, afterAll } from "bun:test" import { Share } from "../../src/core/share" import { Storage } from "../../src/core/storage" -import { Identifier } from "@opencode-ai/util/identifier" +import { Identifier } from "@opencoder-ai/util/identifier" describe.concurrent("core.share", () => { test("should create a share", async () => { diff --git a/packages/function/package.json b/packages/function/package.json index 4c10ab05f891..31a48399fecb 100644 --- a/packages/function/package.json +++ b/packages/function/package.json @@ -1,6 +1,6 @@ { - "name": "@opencode-ai/function", - "version": "1.1.65", + "name": "@opencoder-ai/function", + "version": "1.1.63", "$schema": "https://json.schemastore.org/package.json", "private": true, "type": "module", diff --git a/packages/opencode/AGENTS.md b/packages/opencode/AGENTS.md index a68fd7f3e321..7498e73a6861 100644 --- a/packages/opencode/AGENTS.md +++ b/packages/opencode/AGENTS.md @@ -24,4 +24,4 @@ - **Validation**: All inputs validated with Zod schemas - **Logging**: Use `Log.create({ service: "name" })` pattern - **Storage**: Use `Storage` namespace for persistence -- **API Client**: The TypeScript TUI (built with SolidJS + OpenTUI) communicates with the OpenCode server using `@opencode-ai/sdk`. When adding/modifying server endpoints in `packages/opencode/src/server/server.ts`, run `./script/generate.ts` to regenerate the SDK and related files. +- **API Client**: The TypeScript TUI (built with SolidJS + OpenTUI) communicates with the OpenCode server using `@opencoder-ai/sdk`. When adding/modifying server endpoints in `packages/opencode/src/server/server.ts`, run `./script/generate.ts` to regenerate the SDK and related files. diff --git a/packages/opencode/package.json b/packages/opencode/package.json index e3325bc2ad01..8a73250c9f05 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.1.65", - "name": "opencode", + "version": "1.1.63", + "name": "opencoder", "type": "module", "license": "MIT", "private": true, @@ -27,7 +27,7 @@ "devDependencies": { "@babel/core": "7.28.4", "@octokit/webhooks-types": "7.6.1", - "@opencode-ai/script": "workspace:*", + "@opencoder-ai/script": "workspace:*", "@parcel/watcher-darwin-arm64": "2.5.1", "@parcel/watcher-darwin-x64": "2.5.1", "@parcel/watcher-linux-arm64-glibc": "2.5.1", @@ -52,12 +52,12 @@ "@actions/github": "6.0.1", "@agentclientprotocol/sdk": "0.14.1", "@agni/agent-sdk": "link:@agni/agent-sdk", - "@ai-sdk/amazon-bedrock": "3.0.79", - "@ai-sdk/anthropic": "2.0.62", + "@ai-sdk/amazon-bedrock": "3.0.74", + "@ai-sdk/anthropic": "2.0.58", "@ai-sdk/azure": "2.0.91", "@ai-sdk/cerebras": "1.0.36", "@ai-sdk/cohere": "2.0.22", - "@ai-sdk/deepinfra": "1.0.36", + "@ai-sdk/deepinfra": "1.0.33", "@ai-sdk/gateway": "2.0.30", "@ai-sdk/google": "2.0.52", "@ai-sdk/google-vertex": "3.0.98", @@ -80,10 +80,10 @@ "@octokit/graphql": "9.0.2", "@octokit/rest": "catalog:", "@openauthjs/openauth": "catalog:", - "@opencode-ai/plugin": "workspace:*", - "@opencode-ai/script": "workspace:*", - "@opencode-ai/sdk": "workspace:*", - "@opencode-ai/util": "workspace:*", + "@opencoder-ai/plugin": "workspace:*", + "@opencoder-ai/script": "workspace:*", + "@opencoder-ai/sdk": "workspace:*", + "@opencoder-ai/util": "workspace:*", "@openrouter/ai-sdk-provider": "1.5.4", "@opentui/core": "0.1.79", "@opentui/solid": "0.1.79", diff --git a/packages/opencode/script/build.ts b/packages/opencode/script/build.ts index f0b3fa828a78..a713bfc92446 100755 --- a/packages/opencode/script/build.ts +++ b/packages/opencode/script/build.ts @@ -13,7 +13,7 @@ const dir = path.resolve(__dirname, "..") process.chdir(dir) import pkg from "../package.json" -import { Script } from "@opencode-ai/script" +import { Script } from "@opencoder-ai/script" const modelsUrl = process.env.OPENCODE_MODELS_URL || "https://models.dev" // Fetch and generate models.dev snapshot const modelsData = process.env.MODELS_DEV_API_JSON diff --git a/packages/opencode/script/publish.ts b/packages/opencode/script/publish.ts index fbc1c83ba6dc..ff28facca959 100755 --- a/packages/opencode/script/publish.ts +++ b/packages/opencode/script/publish.ts @@ -1,7 +1,7 @@ #!/usr/bin/env bun import { $ } from "bun" import pkg from "../package.json" -import { Script } from "@opencode-ai/script" +import { Script } from "@opencoder-ai/script" import { fileURLToPath } from "url" const dir = fileURLToPath(new URL("..", import.meta.url)) @@ -25,7 +25,7 @@ await Bun.file(`./dist/${pkg.name}/package.json`).write( { name: pkg.name + "-ai", bin: { - [pkg.name]: `./bin/${pkg.name}`, + opencode: `./bin/opencode`, }, scripts: { postinstall: "bun ./postinstall.mjs || node ./postinstall.mjs", diff --git a/packages/opencode/src/acp/agent.ts b/packages/opencode/src/acp/agent.ts index ae6f6fcc296a..77ede544494f 100644 --- a/packages/opencode/src/acp/agent.ts +++ b/packages/opencode/src/acp/agent.ts @@ -40,7 +40,7 @@ import { Config } from "@/config/config" import { Todo } from "@/session/todo" import { z } from "zod" import { LoadAPIKeyError } from "ai" -import type { AssistantMessage, Event, OpencodeClient, SessionMessageResponse } from "@opencode-ai/sdk/v2" +import type { AssistantMessage, Event, OpencodeClient, SessionMessageResponse } from "@opencoder-ai/sdk/v2" import { applyPatch } from "diff" type ModeOption = { id: string; name: string; description?: string } diff --git a/packages/opencode/src/acp/session.ts b/packages/opencode/src/acp/session.ts index 18aa42313017..0801be8e9909 100644 --- a/packages/opencode/src/acp/session.ts +++ b/packages/opencode/src/acp/session.ts @@ -1,7 +1,7 @@ import { RequestError, type McpServer } from "@agentclientprotocol/sdk" import type { ACPSessionState } from "./types" import { Log } from "@/util/log" -import type { OpencodeClient } from "@opencode-ai/sdk/v2" +import type { OpencodeClient } from "@opencoder-ai/sdk/v2" const log = Log.create({ service: "acp-session-manager" }) diff --git a/packages/opencode/src/acp/types.ts b/packages/opencode/src/acp/types.ts index de8ac5081228..7e951d7a7b36 100644 --- a/packages/opencode/src/acp/types.ts +++ b/packages/opencode/src/acp/types.ts @@ -1,5 +1,5 @@ import type { McpServer } from "@agentclientprotocol/sdk" -import type { OpencodeClient } from "@opencode-ai/sdk/v2" +import type { OpencodeClient } from "@opencoder-ai/sdk/v2" export interface ACPSessionState { id: string diff --git a/packages/opencode/src/bun/index.ts b/packages/opencode/src/bun/index.ts index bdb7cff78e25..4d61f5267639 100644 --- a/packages/opencode/src/bun/index.ts +++ b/packages/opencode/src/bun/index.ts @@ -3,7 +3,7 @@ import { Global } from "../global" import { Log } from "../util/log" import path from "path" import { Filesystem } from "../util/filesystem" -import { NamedError } from "@opencode-ai/util/error" +import { NamedError } from "@opencoder-ai/util/error" import { readableStreamToText } from "bun" import { Lock } from "../util/lock" import { PackageRegistry } from "./registry" diff --git a/packages/opencode/src/cli/cmd/acp.ts b/packages/opencode/src/cli/cmd/acp.ts index 99a9a81ab9cd..b0a3be9d6d99 100644 --- a/packages/opencode/src/cli/cmd/acp.ts +++ b/packages/opencode/src/cli/cmd/acp.ts @@ -4,7 +4,7 @@ import { cmd } from "./cmd" import { AgentSideConnection, ndJsonStream } from "@agentclientprotocol/sdk" import { ACP } from "@/acp/agent" import { Server } from "@/server/server" -import { createOpencodeClient } from "@opencode-ai/sdk/v2" +import { createOpencodeClient } from "@opencoder-ai/sdk/v2" import { withNetworkOptions, resolveNetworkOptions } from "../network" const log = Log.create({ service: "acp-command" }) diff --git a/packages/opencode/src/cli/cmd/auth.ts b/packages/opencode/src/cli/cmd/auth.ts index 34e2269d0c16..d5f8ab3e469a 100644 --- a/packages/opencode/src/cli/cmd/auth.ts +++ b/packages/opencode/src/cli/cmd/auth.ts @@ -10,7 +10,7 @@ import { Config } from "../../config/config" import { Global } from "../../global" import { Plugin } from "../../plugin" import { Instance } from "../../project/instance" -import type { Hooks } from "@opencode-ai/plugin" +import type { Hooks } from "@opencoder-ai/plugin" type PluginAuth = NonNullable diff --git a/packages/opencode/src/cli/cmd/generate.ts b/packages/opencode/src/cli/cmd/generate.ts index fad4514c81e5..dbfb6283b529 100644 --- a/packages/opencode/src/cli/cmd/generate.ts +++ b/packages/opencode/src/cli/cmd/generate.ts @@ -14,7 +14,7 @@ export const GenerateCommand = { { lang: "js", source: [ - `import { createOpencodeClient } from "@opencode-ai/sdk`, + `import { createOpencodeClient } from "@opencoder-ai/sdk`, ``, `const client = createOpencodeClient()`, `await client.${operation.operationId}({`, diff --git a/packages/opencode/src/cli/cmd/run.ts b/packages/opencode/src/cli/cmd/run.ts index 0febec3a207c..494b08ff1e88 100644 --- a/packages/opencode/src/cli/cmd/run.ts +++ b/packages/opencode/src/cli/cmd/run.ts @@ -6,7 +6,7 @@ import { cmd } from "./cmd" import { Flag } from "../../flag/flag" import { bootstrap } from "../bootstrap" import { EOL } from "os" -import { createOpencodeClient, type Message, type OpencodeClient, type ToolPart } from "@opencode-ai/sdk/v2" +import { createOpencodeClient, type Message, type OpencodeClient, type ToolPart } from "@opencoder-ai/sdk/v2" import { Server } from "../../server/server" import { Provider } from "../../provider/provider" import { Agent } from "../../agent/agent" diff --git a/packages/opencode/src/cli/cmd/tui/component/dialog-command.tsx b/packages/opencode/src/cli/cmd/tui/component/dialog-command.tsx index 38dc402758b2..eb351358e609 100644 --- a/packages/opencode/src/cli/cmd/tui/component/dialog-command.tsx +++ b/packages/opencode/src/cli/cmd/tui/component/dialog-command.tsx @@ -11,7 +11,7 @@ import { } from "solid-js" import { useKeyboard } from "@opentui/solid" import { useKeybind } from "@tui/context/keybind" -import type { KeybindsConfig } from "@opencode-ai/sdk/v2" +import type { KeybindsConfig } from "@opencoder-ai/sdk/v2" type Context = ReturnType const ctx = createContext() diff --git a/packages/opencode/src/cli/cmd/tui/component/dialog-provider.tsx b/packages/opencode/src/cli/cmd/tui/component/dialog-provider.tsx index 9682bee4ead2..2698f486124a 100644 --- a/packages/opencode/src/cli/cmd/tui/component/dialog-provider.tsx +++ b/packages/opencode/src/cli/cmd/tui/component/dialog-provider.tsx @@ -8,7 +8,7 @@ import { DialogPrompt } from "../ui/dialog-prompt" import { Link } from "../ui/link" import { useTheme } from "../context/theme" import { TextAttributes } from "@opentui/core" -import type { ProviderAuthAuthorization } from "@opencode-ai/sdk/v2" +import type { ProviderAuthAuthorization } from "@opencoder-ai/sdk/v2" import { DialogModel } from "./dialog-model" import { useKeyboard } from "@opentui/solid" import { Clipboard } from "@tui/util/clipboard" diff --git a/packages/opencode/src/cli/cmd/tui/component/prompt/history.tsx b/packages/opencode/src/cli/cmd/tui/component/prompt/history.tsx index e90503e9f52e..ef1161901235 100644 --- a/packages/opencode/src/cli/cmd/tui/component/prompt/history.tsx +++ b/packages/opencode/src/cli/cmd/tui/component/prompt/history.tsx @@ -5,7 +5,7 @@ import { createStore, produce } from "solid-js/store" import { clone } from "remeda" import { createSimpleContext } from "../../context/helper" import { appendFile, writeFile } from "fs/promises" -import type { AgentPart, FilePart, TextPart } from "@opencode-ai/sdk/v2" +import type { AgentPart, FilePart, TextPart } from "@opencoder-ai/sdk/v2" export type PromptInfo = { input: string diff --git a/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx b/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx index cefef208de4a..972ce8836bb9 100644 --- a/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx +++ b/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx @@ -19,7 +19,7 @@ import { useRenderer } from "@opentui/solid" import { Editor } from "@tui/util/editor" import { useExit } from "../../context/exit" import { Clipboard } from "../../util/clipboard" -import type { FilePart } from "@opencode-ai/sdk/v2" +import type { FilePart } from "@opencoder-ai/sdk/v2" import { TuiEvent } from "../../event" import { iife } from "@/util/iife" import { Locale } from "@/util/locale" diff --git a/packages/opencode/src/cli/cmd/tui/context/keybind.tsx b/packages/opencode/src/cli/cmd/tui/context/keybind.tsx index 0dbbbc6f9ee1..db706b5843a0 100644 --- a/packages/opencode/src/cli/cmd/tui/context/keybind.tsx +++ b/packages/opencode/src/cli/cmd/tui/context/keybind.tsx @@ -2,7 +2,7 @@ import { createMemo } from "solid-js" import { useSync } from "@tui/context/sync" import { Keybind } from "@/util/keybind" import { pipe, mapValues } from "remeda" -import type { KeybindsConfig } from "@opencode-ai/sdk/v2" +import type { KeybindsConfig } from "@opencoder-ai/sdk/v2" import type { ParsedKey, Renderable } from "@opentui/core" import { createStore } from "solid-js/store" import { useKeyboard, useRenderer } from "@opentui/solid" diff --git a/packages/opencode/src/cli/cmd/tui/context/sdk.tsx b/packages/opencode/src/cli/cmd/tui/context/sdk.tsx index 7fa7e05c3d25..64cb61ed6a84 100644 --- a/packages/opencode/src/cli/cmd/tui/context/sdk.tsx +++ b/packages/opencode/src/cli/cmd/tui/context/sdk.tsx @@ -1,4 +1,4 @@ -import { createOpencodeClient, type Event } from "@opencode-ai/sdk/v2" +import { createOpencodeClient, type Event } from "@opencoder-ai/sdk/v2" import { createSimpleContext } from "./helper" import { createGlobalEmitter } from "@solid-primitives/event-bus" import { batch, onCleanup, onMount } from "solid-js" diff --git a/packages/opencode/src/cli/cmd/tui/context/sync.tsx b/packages/opencode/src/cli/cmd/tui/context/sync.tsx index dd754fcb49ed..dcc39e1cf08b 100644 --- a/packages/opencode/src/cli/cmd/tui/context/sync.tsx +++ b/packages/opencode/src/cli/cmd/tui/context/sync.tsx @@ -27,7 +27,7 @@ import { useExit } from "./exit" import { useArgs } from "./args" import { batch, onMount } from "solid-js" import { Log } from "@/util/log" -import type { Path } from "@opencode-ai/sdk" +import type { Path } from "@opencoder-ai/sdk" import { createAgentClient, type GetMailInboxResponse, diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx index 62154cce5636..a6b05493ba7d 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx @@ -1,7 +1,7 @@ import { createMemo, onMount } from "solid-js" import { useSync } from "@tui/context/sync" import { DialogSelect, type DialogSelectOption } from "@tui/ui/dialog-select" -import type { TextPart } from "@opencode-ai/sdk/v2" +import type { TextPart } from "@opencoder-ai/sdk/v2" import { Locale } from "@/util/locale" import { useSDK } from "@tui/context/sdk" import { useRoute } from "@tui/context/route" diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/dialog-timeline.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/dialog-timeline.tsx index 87248a6a8ba6..8920a5066278 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/dialog-timeline.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/dialog-timeline.tsx @@ -1,7 +1,7 @@ import { createMemo, onMount } from "solid-js" import { useSync } from "@tui/context/sync" import { DialogSelect, type DialogSelectOption } from "@tui/ui/dialog-select" -import type { TextPart } from "@opencode-ai/sdk/v2" +import type { TextPart } from "@opencoder-ai/sdk/v2" import { Locale } from "@/util/locale" import { DialogMessage } from "./dialog-message" import { useDialog } from "../../ui/dialog" diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/header.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/header.tsx index 0c5ea9a85723..725eee9214c5 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/header.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/header.tsx @@ -4,7 +4,7 @@ import { useSync } from "@tui/context/sync" import { pipe, sumBy } from "remeda" import { useTheme } from "@tui/context/theme" import { SplitBorder } from "@tui/component/border" -import type { AssistantMessage, Session } from "@opencode-ai/sdk/v2" +import type { AssistantMessage, Session } from "@opencoder-ai/sdk/v2" import { useCommandDialog } from "@tui/component/dialog-command" import { useKeybind } from "../../context/keybind" import { useTerminalDimensions } from "@opentui/solid" 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 c82eb6de6eb8..b197cbfd8bbc 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx @@ -28,7 +28,7 @@ import { RGBA, } from "@opentui/core" import { Prompt, type PromptRef } from "@tui/component/prompt" -import type { AssistantMessage, Part, ToolPart, UserMessage, TextPart, ReasoningPart } from "@opencode-ai/sdk/v2" +import type { AssistantMessage, Part, ToolPart, UserMessage, TextPart, ReasoningPart } from "@opencoder-ai/sdk/v2" import { useLocal } from "@tui/context/local" import { Locale } from "@/util/locale" import type { Tool } from "@/tool/tool" @@ -1893,7 +1893,12 @@ function Task(props: ToolProps) { icon="◉" iconColor={color()} pending="Delegating..." - complete={props.input.subagent_type ?? props.metadata.subagent_type ?? props.input.description ?? props.metadata.description} + complete={ + props.input.subagent_type ?? + props.metadata.subagent_type ?? + props.input.description ?? + props.metadata.description + } part={props.part} > {Locale.titlecase(agentType())} Task " diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/permission.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/permission.tsx index 9e79c76bf518..06dac33384bb 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/permission.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/permission.tsx @@ -4,7 +4,7 @@ import { Portal, useKeyboard, useRenderer, useTerminalDimensions, type JSX } fro import type { TextareaRenderable } from "@opentui/core" import { useKeybind } from "../../context/keybind" import { useTheme, selectedForeground } from "../../context/theme" -import type { PermissionRequest } from "@opencode-ai/sdk/v2" +import type { PermissionRequest } from "@opencoder-ai/sdk/v2" import { useSDK } from "../../context/sdk" import { SplitBorder } from "../../component/border" import { useSync } from "../../context/sync" diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/question.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/question.tsx index 1565a3008185..ab7a6e68c773 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/question.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/question.tsx @@ -4,7 +4,7 @@ import { useKeyboard } from "@opentui/solid" import type { TextareaRenderable } from "@opentui/core" import { useKeybind } from "../../context/keybind" import { selectedForeground, tint, useTheme } from "../../context/theme" -import type { QuestionAnswer, QuestionRequest } from "@opencode-ai/sdk/v2" +import type { QuestionAnswer, QuestionRequest } from "@opencoder-ai/sdk/v2" import { useSDK } from "../../context/sdk" import { SplitBorder } from "../../component/border" import { useTextareaKeybindings } from "../../component/textarea-keybindings" diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx index 7c435d152f91..b2d46d9e7497 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx @@ -4,7 +4,7 @@ import { createStore } from "solid-js/store" import { useTheme } from "../../context/theme" import { Locale } from "@/util/locale" import path from "path" -import type { AssistantMessage } from "@opencode-ai/sdk/v2" +import type { AssistantMessage } from "@opencoder-ai/sdk/v2" import { Global } from "@/global" import { Installation } from "@/installation" import { useKeybind } from "../../context/keybind" diff --git a/packages/opencode/src/cli/cmd/tui/thread.ts b/packages/opencode/src/cli/cmd/tui/thread.ts index 6d41fe857a61..ed4f738605a6 100644 --- a/packages/opencode/src/cli/cmd/tui/thread.ts +++ b/packages/opencode/src/cli/cmd/tui/thread.ts @@ -7,7 +7,7 @@ import { UI } from "@/cli/ui" import { iife } from "@/util/iife" import { Log } from "@/util/log" import { withNetworkOptions, resolveNetworkOptions } from "@/cli/network" -import type { Event } from "@opencode-ai/sdk/v2" +import type { Event } from "@opencoder-ai/sdk/v2" import type { EventSource } from "./context/sdk" import { win32DisableProcessedInput, win32InstallCtrlCGuard } from "./win32" diff --git a/packages/opencode/src/cli/cmd/tui/util/transcript.ts b/packages/opencode/src/cli/cmd/tui/util/transcript.ts index 420c9dde1bf6..8a2c63d8c6c5 100644 --- a/packages/opencode/src/cli/cmd/tui/util/transcript.ts +++ b/packages/opencode/src/cli/cmd/tui/util/transcript.ts @@ -1,4 +1,4 @@ -import type { AssistantMessage, Part, UserMessage } from "@opencode-ai/sdk/v2" +import type { AssistantMessage, Part, UserMessage } from "@opencoder-ai/sdk/v2" import { Locale } from "@/util/locale" export type TranscriptOptions = { diff --git a/packages/opencode/src/cli/cmd/tui/worker.ts b/packages/opencode/src/cli/cmd/tui/worker.ts index e63f10ba80c9..63c6aafa8b7f 100644 --- a/packages/opencode/src/cli/cmd/tui/worker.ts +++ b/packages/opencode/src/cli/cmd/tui/worker.ts @@ -7,7 +7,7 @@ import { Rpc } from "@/util/rpc" import { upgrade } from "@/cli/upgrade" import { Config } from "@/config/config" import { GlobalBus } from "@/bus/global" -import { createOpencodeClient, type Event } from "@opencode-ai/sdk/v2" +import { createOpencodeClient, type Event } from "@opencoder-ai/sdk/v2" import type { BunWebSocketData } from "hono/bun" import { Flag } from "@/flag/flag" diff --git a/packages/opencode/src/cli/ui.ts b/packages/opencode/src/cli/ui.ts index 9df1f4ac5502..950df6136deb 100644 --- a/packages/opencode/src/cli/ui.ts +++ b/packages/opencode/src/cli/ui.ts @@ -1,6 +1,6 @@ import z from "zod" import { EOL } from "os" -import { NamedError } from "@opencode-ai/util/error" +import { NamedError } from "@opencoder-ai/util/error" import { logo as glyphs } from "./logo" export namespace UI { diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts index 4604a6f94619..903a6ddcbaa2 100644 --- a/packages/opencode/src/config/config.ts +++ b/packages/opencode/src/config/config.ts @@ -9,7 +9,7 @@ import { mergeDeep, pipe, unique } from "remeda" import { Global } from "../global" import fs from "fs/promises" import { lazy } from "../util/lazy" -import { NamedError } from "@opencode-ai/util/error" +import { NamedError } from "@opencoder-ai/util/error" import { Flag } from "../flag/flag" import { Auth } from "../auth" import { @@ -258,7 +258,7 @@ export namespace Config { .catch(() => ({})) json.dependencies = { ...json.dependencies, - "@opencode-ai/plugin": targetVersion, + "@opencoder-ai/plugin": targetVersion, } await Bun.write(pkg, JSON.stringify(json, null, 2)) await new Promise((resolve) => setTimeout(resolve, 3000)) @@ -307,15 +307,15 @@ export namespace Config { const parsed = await pkgFile.json().catch(() => null) const dependencies = parsed?.dependencies ?? {} - const depVersion = dependencies["@opencode-ai/plugin"] + const depVersion = dependencies["@opencoder-ai/plugin"] if (!depVersion) return true const targetVersion = Installation.isLocal() ? "latest" : Installation.VERSION if (targetVersion === "latest") { - const isOutdated = await PackageRegistry.isOutdated("@opencode-ai/plugin", depVersion, dir) + const isOutdated = await PackageRegistry.isOutdated("@opencoder-ai/plugin", depVersion, dir) if (!isOutdated) return false log.info("Cached version is outdated, proceeding with install", { - pkg: "@opencode-ai/plugin", + pkg: "@opencoder-ai/plugin", cachedVersion: depVersion, }) return true diff --git a/packages/opencode/src/config/markdown.ts b/packages/opencode/src/config/markdown.ts index 4cd17746c54c..de553309d57b 100644 --- a/packages/opencode/src/config/markdown.ts +++ b/packages/opencode/src/config/markdown.ts @@ -1,4 +1,4 @@ -import { NamedError } from "@opencode-ai/util/error" +import { NamedError } from "@opencoder-ai/util/error" import matter from "gray-matter" import { z } from "zod" diff --git a/packages/opencode/src/file/ripgrep.ts b/packages/opencode/src/file/ripgrep.ts index 58f9af7cdbab..5d0293aed04a 100644 --- a/packages/opencode/src/file/ripgrep.ts +++ b/packages/opencode/src/file/ripgrep.ts @@ -3,7 +3,7 @@ import path from "path" import { Global } from "../global" import fs from "fs/promises" import z from "zod" -import { NamedError } from "@opencode-ai/util/error" +import { NamedError } from "@opencoder-ai/util/error" import { lazy } from "../util/lazy" import { $ } from "bun" diff --git a/packages/opencode/src/ide/index.ts b/packages/opencode/src/ide/index.ts index 0837b2aa5ff5..bbccb3dc5892 100644 --- a/packages/opencode/src/ide/index.ts +++ b/packages/opencode/src/ide/index.ts @@ -2,7 +2,7 @@ import { BusEvent } from "@/bus/bus-event" import { Bus } from "@/bus" import { spawn } from "bun" import z from "zod" -import { NamedError } from "@opencode-ai/util/error" +import { NamedError } from "@opencoder-ai/util/error" import { Log } from "../util/log" const SUPPORTED_IDES = [ diff --git a/packages/opencode/src/index.ts b/packages/opencode/src/index.ts index 6dc5e99e91ef..b16b954796c1 100644 --- a/packages/opencode/src/index.ts +++ b/packages/opencode/src/index.ts @@ -10,7 +10,7 @@ import { UninstallCommand } from "./cli/cmd/uninstall" import { ModelsCommand } from "./cli/cmd/models" import { UI } from "./cli/ui" import { Installation } from "./installation" -import { NamedError } from "@opencode-ai/util/error" +import { NamedError } from "@opencoder-ai/util/error" import { FormatError } from "./cli/error" import { ServeCommand } from "./cli/cmd/serve" import { DebugCommand } from "./cli/cmd/debug" diff --git a/packages/opencode/src/installation/index.ts b/packages/opencode/src/installation/index.ts index 47278bd5628e..b693f063f6bc 100644 --- a/packages/opencode/src/installation/index.ts +++ b/packages/opencode/src/installation/index.ts @@ -2,7 +2,7 @@ import { BusEvent } from "@/bus/bus-event" import path from "path" import { $ } from "bun" import z from "zod" -import { NamedError } from "@opencode-ai/util/error" +import { NamedError } from "@opencoder-ai/util/error" import { Log } from "../util/log" import { iife } from "@/util/iife" import { Flag } from "../flag/flag" @@ -104,7 +104,7 @@ export namespace Installation { for (const check of checks) { const output = await check.command() const installedName = - check.name === "brew" || check.name === "choco" || check.name === "scoop" ? "opencode" : "opencode-ai" + check.name === "brew" || check.name === "choco" || check.name === "scoop" ? "opencode" : "opencoder-ai" if (output.includes(installedName)) { return check.name } @@ -132,19 +132,19 @@ export namespace Installation { let cmd switch (method) { case "curl": - cmd = $`curl -fsSL https://opencode.ai/install | bash`.env({ + cmd = $`curl -fsSL https://raw.githubusercontent.com/AryaLabsHQ/opencoder/dev/install | bash`.env({ ...process.env, VERSION: target, }) break case "npm": - cmd = $`npm install -g opencode-ai@${target}` + cmd = $`npm install -g opencoder-ai@${target}` break case "pnpm": - cmd = $`pnpm install -g opencode-ai@${target}` + cmd = $`pnpm install -g opencoder-ai@${target}` break case "bun": - cmd = $`bun install -g opencode-ai@${target}` + cmd = $`bun install -g opencoder-ai@${target}` break case "brew": { const formula = await getBrewFormula() @@ -220,7 +220,7 @@ export namespace Installation { return reg.endsWith("/") ? reg.slice(0, -1) : reg }) const channel = CHANNEL - return fetch(`${registry}/opencode-ai/${channel}`) + return fetch(`${registry}/opencoder-ai/${channel}`) .then((res) => { if (!res.ok) throw new Error(res.statusText) return res.json() @@ -251,7 +251,7 @@ export namespace Installation { .then((data: any) => data.version) } - return fetch("https://api.github.com/repos/anomalyco/opencode/releases/latest") + return fetch("https://api.github.com/repos/AryaLabsHQ/opencoder/releases/latest") .then((res) => { if (!res.ok) throw new Error(res.statusText) return res.json() diff --git a/packages/opencode/src/lsp/client.ts b/packages/opencode/src/lsp/client.ts index 8704b65acb5b..622bec84d4de 100644 --- a/packages/opencode/src/lsp/client.ts +++ b/packages/opencode/src/lsp/client.ts @@ -8,7 +8,7 @@ import { Log } from "../util/log" import { LANGUAGE_EXTENSIONS } from "./language" import z from "zod" import type { LSPServer } from "./server" -import { NamedError } from "@opencode-ai/util/error" +import { NamedError } from "@opencoder-ai/util/error" import { withTimeout } from "../util/timeout" import { Instance } from "../project/instance" import { Filesystem } from "../util/filesystem" diff --git a/packages/opencode/src/mcp/index.ts b/packages/opencode/src/mcp/index.ts index 3c29fe03d30a..1e561c4f9fa4 100644 --- a/packages/opencode/src/mcp/index.ts +++ b/packages/opencode/src/mcp/index.ts @@ -11,7 +11,7 @@ import { } from "@modelcontextprotocol/sdk/types.js" import { Config } from "../config/config" import { Log } from "../util/log" -import { NamedError } from "@opencode-ai/util/error" +import { NamedError } from "@opencoder-ai/util/error" import z from "zod/v4" import { Instance } from "../project/instance" import { Installation } from "../installation" diff --git a/packages/opencode/src/plugin/codex.ts b/packages/opencode/src/plugin/codex.ts index 15f260da8f0f..99e8fb328d6c 100644 --- a/packages/opencode/src/plugin/codex.ts +++ b/packages/opencode/src/plugin/codex.ts @@ -1,4 +1,4 @@ -import type { Hooks, PluginInput } from "@opencode-ai/plugin" +import type { Hooks, PluginInput } from "@opencoder-ai/plugin" import { Log } from "../util/log" import { Installation } from "../installation" import { Auth, OAUTH_DUMMY_KEY } from "../auth" diff --git a/packages/opencode/src/plugin/copilot.ts b/packages/opencode/src/plugin/copilot.ts index cb2b91bf0462..e5214e4c11af 100644 --- a/packages/opencode/src/plugin/copilot.ts +++ b/packages/opencode/src/plugin/copilot.ts @@ -1,4 +1,4 @@ -import type { Hooks, PluginInput } from "@opencode-ai/plugin" +import type { Hooks, PluginInput } from "@opencoder-ai/plugin" import { Installation } from "@/installation" import { iife } from "@/util/iife" diff --git a/packages/opencode/src/plugin/index.ts b/packages/opencode/src/plugin/index.ts index 83deab1bb816..1c788b5b8fe9 100644 --- a/packages/opencode/src/plugin/index.ts +++ b/packages/opencode/src/plugin/index.ts @@ -1,16 +1,16 @@ -import type { PluginInput, Hooks } from "@opencode-ai/plugin" -import type { Plugin as PluginFn } from "@opencode-ai/plugin" +import type { PluginInput, Hooks } from "@opencoder-ai/plugin" +import type { Plugin as PluginFn } from "@opencoder-ai/plugin" import { Config } from "../config/config" import { Bus } from "../bus" import { Log } from "../util/log" -import { createOpencodeClient } from "@opencode-ai/sdk/v2" +import { createOpencodeClient } from "@opencoder-ai/sdk/v2" import { Server } from "../server/server" import { BunProc } from "../bun" import { Instance } from "../project/instance" import { Flag } from "../flag/flag" import { CodexAuthPlugin } from "./codex" import { Session } from "../session" -import { NamedError } from "@opencode-ai/util/error" +import { NamedError } from "@opencoder-ai/util/error" import { CopilotAuthPlugin } from "./copilot" export namespace Plugin { diff --git a/packages/opencode/src/project/project.ts b/packages/opencode/src/project/project.ts index c79a62c6c95e..e854b2d083e2 100644 --- a/packages/opencode/src/project/project.ts +++ b/packages/opencode/src/project/project.ts @@ -7,7 +7,7 @@ import { Log } from "../util/log" import { Flag } from "@/flag/flag" import { Session } from "../session" import { work } from "../util/queue" -import { fn } from "@opencode-ai/util/fn" +import { fn } from "@opencoder-ai/util/fn" import { BusEvent } from "@/bus/bus-event" import { iife } from "@/util/iife" import { GlobalBus } from "@/bus/global" diff --git a/packages/opencode/src/provider/auth.ts b/packages/opencode/src/provider/auth.ts index e6681ff08914..45cc383cac6a 100644 --- a/packages/opencode/src/provider/auth.ts +++ b/packages/opencode/src/provider/auth.ts @@ -3,8 +3,8 @@ import { Plugin } from "../plugin" import { map, filter, pipe, fromEntries, mapValues } from "remeda" import z from "zod" import { fn } from "@/util/fn" -import type { AuthOuathResult, Hooks } from "@opencode-ai/plugin" -import { NamedError } from "@opencode-ai/util/error" +import type { AuthOuathResult, Hooks } from "@opencoder-ai/plugin" +import { NamedError } from "@opencoder-ai/util/error" import { Auth } from "@/auth" export namespace ProviderAuth { diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts index 44bcf8adb3de..2a4f2a618801 100644 --- a/packages/opencode/src/provider/provider.ts +++ b/packages/opencode/src/provider/provider.ts @@ -8,7 +8,7 @@ import { Log } from "../util/log" import { BunProc } from "../bun" import { Plugin } from "../plugin" import { ModelsDev } from "./models" -import { NamedError } from "@opencode-ai/util/error" +import { NamedError } from "@opencoder-ai/util/error" import { Auth } from "../auth" import { Env } from "../env" import { Instance } from "../project/instance" diff --git a/packages/opencode/src/pty/index.ts b/packages/opencode/src/pty/index.ts index a9052a79eb8c..352df39b55b2 100644 --- a/packages/opencode/src/pty/index.ts +++ b/packages/opencode/src/pty/index.ts @@ -5,7 +5,7 @@ import z from "zod" import { Identifier } from "../id/id" import { Log } from "../util/log" import { Instance } from "../project/instance" -import { lazy } from "@opencode-ai/util/lazy" +import { lazy } from "@opencoder-ai/util/lazy" import { Shell } from "@/shell/shell" import { Plugin } from "@/plugin" diff --git a/packages/opencode/src/server/server.ts b/packages/opencode/src/server/server.ts index 9fb5206551b6..be24af2900fb 100644 --- a/packages/opencode/src/server/server.ts +++ b/packages/opencode/src/server/server.ts @@ -9,7 +9,7 @@ import { proxy } from "hono/proxy" import { basicAuth } from "hono/basic-auth" import z from "zod" import { Provider } from "../provider/provider" -import { NamedError } from "@opencode-ai/util/error" +import { NamedError } from "@opencoder-ai/util/error" import { LSP } from "../lsp" import { Format } from "../format" import { TuiRoutes } from "./routes/tui" diff --git a/packages/opencode/src/session/index.ts b/packages/opencode/src/session/index.ts index 9a15dfae7cc4..c6c7a44de66b 100644 --- a/packages/opencode/src/session/index.ts +++ b/packages/opencode/src/session/index.ts @@ -1,4 +1,4 @@ -import { Slug } from "@opencode-ai/util/slug" +import { Slug } from "@opencoder-ai/util/slug" import path from "path" import { BusEvent } from "@/bus/bus-event" import { Bus } from "@/bus" diff --git a/packages/opencode/src/session/message-v2.ts b/packages/opencode/src/session/message-v2.ts index 70763548c6a0..3316694e9934 100644 --- a/packages/opencode/src/session/message-v2.ts +++ b/packages/opencode/src/session/message-v2.ts @@ -1,6 +1,6 @@ import { BusEvent } from "@/bus/bus-event" import z from "zod" -import { NamedError } from "@opencode-ai/util/error" +import { NamedError } from "@opencoder-ai/util/error" import { APICallError, convertToModelMessages, LoadAPIKeyError, type ModelMessage, type UIMessage } from "ai" import { Identifier } from "../id/id" import { LSP } from "../lsp" diff --git a/packages/opencode/src/session/message.ts b/packages/opencode/src/session/message.ts index 5c950d0e4028..e9f51d3ef5bf 100644 --- a/packages/opencode/src/session/message.ts +++ b/packages/opencode/src/session/message.ts @@ -1,5 +1,5 @@ import z from "zod" -import { NamedError } from "@opencode-ai/util/error" +import { NamedError } from "@opencoder-ai/util/error" export namespace Message { export const OutputLengthError = NamedError.create("MessageOutputLengthError", z.object({})) diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index 9e340e3a5d80..0dbcf02f26f5 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -33,7 +33,7 @@ import { Command } from "../command" import { $, fileURLToPath, pathToFileURL } from "bun" import { ConfigMarkdown } from "../config/markdown" import { SessionSummary } from "./summary" -import { NamedError } from "@opencode-ai/util/error" +import { NamedError } from "@opencoder-ai/util/error" import { fn } from "@/util/fn" import { SessionProcessor } from "./processor" import { TaskTool } from "@/tool/task" diff --git a/packages/opencode/src/session/retry.ts b/packages/opencode/src/session/retry.ts index 6d057f539f81..2c2038bb99b7 100644 --- a/packages/opencode/src/session/retry.ts +++ b/packages/opencode/src/session/retry.ts @@ -1,4 +1,4 @@ -import type { NamedError } from "@opencode-ai/util/error" +import type { NamedError } from "@opencoder-ai/util/error" import { MessageV2 } from "./message-v2" import { iife } from "@/util/iife" diff --git a/packages/opencode/src/share/share-next.ts b/packages/opencode/src/share/share-next.ts index a3a229d1a1d5..87fdaf6982ed 100644 --- a/packages/opencode/src/share/share-next.ts +++ b/packages/opencode/src/share/share-next.ts @@ -6,7 +6,7 @@ import { Session } from "@/session" import { MessageV2 } from "@/session/message-v2" import { Storage } from "@/storage/storage" import { Log } from "@/util/log" -import type * as SDK from "@opencode-ai/sdk/v2" +import type * as SDK from "@opencoder-ai/sdk/v2" export namespace ShareNext { const log = Log.create({ service: "share-next" }) diff --git a/packages/opencode/src/skill/skill.ts b/packages/opencode/src/skill/skill.ts index 42795b7ebcc3..bc93bceb6ae9 100644 --- a/packages/opencode/src/skill/skill.ts +++ b/packages/opencode/src/skill/skill.ts @@ -3,7 +3,7 @@ import path from "path" import os from "os" import { Config } from "../config/config" import { Instance } from "../project/instance" -import { NamedError } from "@opencode-ai/util/error" +import { NamedError } from "@opencoder-ai/util/error" import { ConfigMarkdown } from "../config/markdown" import { Log } from "../util/log" import { Global } from "@/global" diff --git a/packages/opencode/src/storage/storage.ts b/packages/opencode/src/storage/storage.ts index 18f2d67e7ac0..c5d7edcb17dd 100644 --- a/packages/opencode/src/storage/storage.ts +++ b/packages/opencode/src/storage/storage.ts @@ -6,7 +6,7 @@ import { Filesystem } from "../util/filesystem" import { lazy } from "../util/lazy" import { Lock } from "../util/lock" import { $ } from "bun" -import { NamedError } from "@opencode-ai/util/error" +import { NamedError } from "@opencoder-ai/util/error" import z from "zod" export namespace Storage { diff --git a/packages/opencode/src/tool/registry.ts b/packages/opencode/src/tool/registry.ts index 82c5bff00799..60b75d849907 100644 --- a/packages/opencode/src/tool/registry.ts +++ b/packages/opencode/src/tool/registry.ts @@ -16,7 +16,7 @@ import { Tool } from "./tool" import { Instance } from "../project/instance" import { Config } from "../config/config" import path from "path" -import { type ToolContext as PluginToolContext, type ToolDefinition } from "@opencode-ai/plugin" +import { type ToolContext as PluginToolContext, type ToolDefinition, type ToolResult } from "@opencoder-ai/plugin" import z from "zod" import { Plugin } from "../plugin" import { WebSearchTool } from "./websearch" diff --git a/packages/opencode/src/worktree/index.ts b/packages/opencode/src/worktree/index.ts index 85d7f6d0e8a2..3a5fe0ec49f0 100644 --- a/packages/opencode/src/worktree/index.ts +++ b/packages/opencode/src/worktree/index.ts @@ -2,7 +2,7 @@ import { $ } from "bun" import fs from "fs/promises" import path from "path" import z from "zod" -import { NamedError } from "@opencode-ai/util/error" +import { NamedError } from "@opencoder-ai/util/error" import { Global } from "../global" import { Instance } from "../project/instance" import { InstanceBootstrap } from "../project/bootstrap" diff --git a/packages/opencode/test/acp/event-subscription.test.ts b/packages/opencode/test/acp/event-subscription.test.ts index 8e139ff59732..f8feca71e2ba 100644 --- a/packages/opencode/test/acp/event-subscription.test.ts +++ b/packages/opencode/test/acp/event-subscription.test.ts @@ -1,7 +1,7 @@ import { describe, expect, test } from "bun:test" import { ACP } from "../../src/acp/agent" import type { AgentSideConnection } from "@agentclientprotocol/sdk" -import type { Event } from "@opencode-ai/sdk/v2" +import type { Event } from "@opencoder-ai/sdk/v2" import { Instance } from "../../src/project/instance" import { tmpdir } from "../fixture/fixture" diff --git a/packages/opencode/test/cli/tui/transcript.test.ts b/packages/opencode/test/cli/tui/transcript.test.ts index 7a5fa6b8f1cf..4b8eb0c77144 100644 --- a/packages/opencode/test/cli/tui/transcript.test.ts +++ b/packages/opencode/test/cli/tui/transcript.test.ts @@ -5,7 +5,7 @@ import { formatPart, formatTranscript, } from "../../../src/cli/cmd/tui/util/transcript" -import type { AssistantMessage, Part, UserMessage } from "@opencode-ai/sdk/v2" +import type { AssistantMessage, Part, UserMessage } from "@opencoder-ai/sdk/v2" describe("transcript", () => { describe("formatAssistantHeader", () => { diff --git a/packages/opencode/test/session/retry.test.ts b/packages/opencode/test/session/retry.test.ts index 6768e72d95a7..8ca9a3be7e00 100644 --- a/packages/opencode/test/session/retry.test.ts +++ b/packages/opencode/test/session/retry.test.ts @@ -1,5 +1,5 @@ import { describe, expect, test } from "bun:test" -import type { NamedError } from "@opencode-ai/util/error" +import type { NamedError } from "@opencoder-ai/util/error" import { APICallError } from "ai" import { SessionRetry } from "../../src/session/retry" import { MessageV2 } from "../../src/session/message-v2" diff --git a/packages/opencode/test/tool/registry.test.ts b/packages/opencode/test/tool/registry.test.ts index 706a9e12caf9..a5eba09c6a42 100644 --- a/packages/opencode/test/tool/registry.test.ts +++ b/packages/opencode/test/tool/registry.test.ts @@ -88,7 +88,7 @@ describe("tool.registry", () => { JSON.stringify({ name: "custom-tools", dependencies: { - "@opencode-ai/plugin": "^0.0.0", + "@opencoder-ai/plugin": "^0.0.0", cowsay: "^1.6.0", }, }), diff --git a/packages/plugin/package.json b/packages/plugin/package.json index c373083f5873..958fdf79d6cc 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.1.65", + "name": "@opencoder-ai/plugin", + "version": "1.1.63", "type": "module", "license": "MIT", "scripts": { @@ -16,7 +16,7 @@ "dist" ], "dependencies": { - "@opencode-ai/sdk": "workspace:*", + "@opencoder-ai/sdk": "workspace:*", "zod": "catalog:" }, "devDependencies": { diff --git a/packages/plugin/script/publish.ts b/packages/plugin/script/publish.ts index 647b56e5e2dd..b0ee7b17dbf9 100755 --- a/packages/plugin/script/publish.ts +++ b/packages/plugin/script/publish.ts @@ -1,5 +1,5 @@ #!/usr/bin/env bun -import { Script } from "@opencode-ai/script" +import { Script } from "@opencoder-ai/script" import { $ } from "bun" const dir = new URL("..", import.meta.url).pathname diff --git a/packages/plugin/src/index.ts b/packages/plugin/src/index.ts index 00f2e75e25e5..e08a366a954d 100644 --- a/packages/plugin/src/index.ts +++ b/packages/plugin/src/index.ts @@ -10,7 +10,7 @@ import type { Auth, Config, OpencodeClient, -} from "@opencode-ai/sdk/v2" +} from "@opencoder-ai/sdk/v2" import type { BunShell } from "./shell" import { type ToolDefinition } from "./tool" diff --git a/packages/plugin/src/tool.ts b/packages/plugin/src/tool.ts index 28714535b092..a4b47cc619ca 100644 --- a/packages/plugin/src/tool.ts +++ b/packages/plugin/src/tool.ts @@ -1,4 +1,5 @@ import { z } from "zod" +import type { FilePart } from "@opencoder-ai/sdk" export type ToolContext = { sessionID: string @@ -27,10 +28,27 @@ type AskInput = { metadata: { [key: string]: any } } +/** + * Structured result for plugin tools. + * + * Return this instead of a plain string to provide rich metadata + * that integrates with streaming updates. + */ +export interface ToolResult { + /** Title displayed in the UI */ + title: string + /** Arbitrary metadata passed to tool.execute.after hooks */ + metadata: Record + /** The text output returned to the model */ + output: string + /** Optional file attachments to include with the result */ + attachments?: FilePart[] +} + export function tool(input: { description: string args: Args - execute(args: z.infer>, context: ToolContext): Promise + execute(args: z.infer>, context: ToolContext): Promise }) { return input } diff --git a/packages/script/package.json b/packages/script/package.json index 45de3bcb99fb..f5fa940f73bd 100644 --- a/packages/script/package.json +++ b/packages/script/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package", - "name": "@opencode-ai/script", + "name": "@opencoder-ai/script", "license": "MIT", "devDependencies": { "@types/bun": "catalog:" diff --git a/packages/script/src/index.ts b/packages/script/src/index.ts index a3f5e7a8e2a4..6de095c4139a 100644 --- a/packages/script/src/index.ts +++ b/packages/script/src/index.ts @@ -33,7 +33,7 @@ const IS_PREVIEW = CHANNEL !== "latest" const VERSION = await (async () => { if (env.OPENCODE_VERSION) return env.OPENCODE_VERSION if (IS_PREVIEW) return `0.0.0-${CHANNEL}-${new Date().toISOString().slice(0, 16).replace(/[-:T]/g, "")}` - const version = await fetch("https://registry.npmjs.org/opencode-ai/latest") + const version = await fetch("https://registry.npmjs.org/opencoder-ai/latest") .then((res) => { if (!res.ok) throw new Error(res.statusText) return res.json() diff --git a/packages/sdk/js/example/example.ts b/packages/sdk/js/example/example.ts index 42838a82a7e6..5cffd53c9f40 100644 --- a/packages/sdk/js/example/example.ts +++ b/packages/sdk/js/example/example.ts @@ -1,4 +1,4 @@ -import { createOpencodeClient, createOpencodeServer } from "@opencode-ai/sdk" +import { createOpencodeClient, createOpencodeServer } from "@opencoder-ai/sdk" import { pathToFileURL } from "bun" const server = await createOpencodeServer() diff --git a/packages/sdk/js/package.json b/packages/sdk/js/package.json index ff8108b7be57..0ca552a65d9e 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.1.65", + "name": "@opencoder-ai/sdk", + "version": "1.1.63", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/sdk/js/script/publish.ts b/packages/sdk/js/script/publish.ts index 46dd42b700d1..2fd21da9c3fb 100755 --- a/packages/sdk/js/script/publish.ts +++ b/packages/sdk/js/script/publish.ts @@ -1,6 +1,6 @@ #!/usr/bin/env bun -import { Script } from "@opencode-ai/script" +import { Script } from "@opencoder-ai/script" import { $ } from "bun" const dir = new URL("..", import.meta.url).pathname diff --git a/packages/sdk/js/src/v2/gen/types.gen.ts b/packages/sdk/js/src/v2/gen/types.gen.ts index 2ebbc8db55ed..ff3d0d36dacc 100644 --- a/packages/sdk/js/src/v2/gen/types.gen.ts +++ b/packages/sdk/js/src/v2/gen/types.gen.ts @@ -2155,6 +2155,7 @@ export type File = { removed: number status: "added" | "deleted" | "modified" } + export type McpStatusConnected = { status: "connected" } diff --git a/packages/sdk/openapi.json b/packages/sdk/openapi.json index c63904c3f305..a557e2097daf 100644 --- a/packages/sdk/openapi.json +++ b/packages/sdk/openapi.json @@ -86,7 +86,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.global.config.get({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.global.config.get({\n ...\n})" } ] }, @@ -128,7 +128,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.global.config.update({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.global.config.update({\n ...\n})" } ] } @@ -207,7 +207,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.auth.set({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.auth.set({\n ...\n})" } ] }, @@ -250,7 +250,7 @@ "x-codeSamples": [ { "lang": "js", - "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.auth.remove({\n ...\n})" + "source": "import { createOpencodeClient } from \"@opencoder-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.auth.remove({\n ...\n})" } ] } diff --git a/packages/slack/README.md b/packages/slack/README.md index a12978d8a6ea..9e7a26612ffe 100644 --- a/packages/slack/README.md +++ b/packages/slack/README.md @@ -1,4 +1,4 @@ -# @opencode-ai/slack +# @opencoder-ai/slack Slack bot integration for opencode that creates threaded conversations. diff --git a/packages/slack/package.json b/packages/slack/package.json index 78a5702228f6..98dba5c1b777 100644 --- a/packages/slack/package.json +++ b/packages/slack/package.json @@ -1,6 +1,6 @@ { - "name": "@opencode-ai/slack", - "version": "1.1.65", + "name": "@opencoder-ai/slack", + "version": "1.1.63", "type": "module", "license": "MIT", "scripts": { @@ -8,7 +8,7 @@ "typecheck": "tsgo --noEmit" }, "dependencies": { - "@opencode-ai/sdk": "workspace:*", + "@opencoder-ai/sdk": "workspace:*", "@slack/bolt": "^3.17.1" }, "devDependencies": { diff --git a/packages/slack/src/index.ts b/packages/slack/src/index.ts index d07e3dfb4161..4f63ee2cc498 100644 --- a/packages/slack/src/index.ts +++ b/packages/slack/src/index.ts @@ -1,5 +1,5 @@ import { App } from "@slack/bolt" -import { createOpencode, type ToolPart } from "@opencode-ai/sdk" +import { createOpencode, type ToolPart } from "@opencoder-ai/sdk" const app = new App({ token: process.env.SLACK_BOT_TOKEN, diff --git a/packages/ui/package.json b/packages/ui/package.json index 5dbbb4605a37..0fd87cbb246f 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { - "name": "@opencode-ai/ui", - "version": "1.1.65", + "name": "@opencoder-ai/ui", + "version": "1.1.63", "type": "module", "license": "MIT", "exports": { @@ -41,8 +41,8 @@ }, "dependencies": { "@kobalte/core": "catalog:", - "@opencode-ai/sdk": "workspace:*", - "@opencode-ai/util": "workspace:*", + "@opencoder-ai/sdk": "workspace:*", + "@opencoder-ai/util": "workspace:*", "@pierre/diffs": "catalog:", "@shikijs/transformers": "3.9.2", "@solid-primitives/bounds": "0.1.3", diff --git a/packages/ui/src/components/diff.tsx b/packages/ui/src/components/diff.tsx index 0966db75e036..fd16b1d82adb 100644 --- a/packages/ui/src/components/diff.tsx +++ b/packages/ui/src/components/diff.tsx @@ -1,4 +1,4 @@ -import { checksum } from "@opencode-ai/util/encode" +import { checksum } from "@opencoder-ai/util/encode" import { FileDiff, type SelectedLineRange, VirtualizedFileDiff } from "@pierre/diffs" import { createMediaQuery } from "@solid-primitives/media" import { createEffect, createMemo, createSignal, onCleanup, splitProps } from "solid-js" diff --git a/packages/ui/src/components/list.tsx b/packages/ui/src/components/list.tsx index aa2347037ea4..0738f44be268 100644 --- a/packages/ui/src/components/list.tsx +++ b/packages/ui/src/components/list.tsx @@ -1,4 +1,4 @@ -import { type FilteredListProps, useFilteredList } from "@opencode-ai/ui/hooks" +import { type FilteredListProps, useFilteredList } from "@opencoder-ai/ui/hooks" import { createEffect, createSignal, For, onCleanup, type JSX, on, Show } from "solid-js" import { createStore } from "solid-js/store" import { useI18n } from "../context/i18n" diff --git a/packages/ui/src/components/markdown.tsx b/packages/ui/src/components/markdown.tsx index 608db818f549..cf895f7b1fa5 100644 --- a/packages/ui/src/components/markdown.tsx +++ b/packages/ui/src/components/markdown.tsx @@ -2,7 +2,7 @@ import { useMarked } from "../context/marked" import { useI18n } from "../context/i18n" import DOMPurify from "dompurify" import morphdom from "morphdom" -import { checksum } from "@opencode-ai/util/encode" +import { checksum } from "@opencoder-ai/util/encode" import { ComponentProps, createEffect, createResource, createSignal, onCleanup, splitProps } from "solid-js" import { isServer } from "solid-js/web" diff --git a/packages/ui/src/components/message-nav.tsx b/packages/ui/src/components/message-nav.tsx index d151633faab7..a0d8a2f1ae7a 100644 --- a/packages/ui/src/components/message-nav.tsx +++ b/packages/ui/src/components/message-nav.tsx @@ -1,4 +1,4 @@ -import { UserMessage } from "@opencode-ai/sdk/v2" +import { UserMessage } from "@opencoder-ai/sdk/v2" import { ComponentProps, For, Match, Show, splitProps, Switch } from "solid-js" import { DiffChanges } from "./diff-changes" import { Tooltip } from "@kobalte/core/tooltip" diff --git a/packages/ui/src/components/message-part.tsx b/packages/ui/src/components/message-part.tsx index 3f61b3186d30..ca248cbc9cb2 100644 --- a/packages/ui/src/components/message-part.tsx +++ b/packages/ui/src/components/message-part.tsx @@ -26,7 +26,7 @@ import { QuestionRequest, QuestionAnswer, QuestionInfo, -} from "@opencode-ai/sdk/v2" +} from "@opencoder-ai/sdk/v2" import { createStore } from "solid-js/store" import { useData } from "../context" import { useDiffComponent } from "../context/diff" @@ -42,9 +42,9 @@ import { Checkbox } from "./checkbox" import { DiffChanges } from "./diff-changes" import { Markdown } from "./markdown" import { ImagePreview } from "./image-preview" -import { findLast } from "@opencode-ai/util/array" -import { getDirectory as _getDirectory, getFilename } from "@opencode-ai/util/path" -import { checksum } from "@opencode-ai/util/encode" +import { findLast } from "@opencoder-ai/util/array" +import { getDirectory as _getDirectory, getFilename } from "@opencoder-ai/util/path" +import { checksum } from "@opencoder-ai/util/encode" import { Tooltip } from "./tooltip" import { IconButton } from "./icon-button" import { createAutoScroll } from "../hooks" diff --git a/packages/ui/src/components/session-review.tsx b/packages/ui/src/components/session-review.tsx index fe2475548ea4..e2739f6f1ad3 100644 --- a/packages/ui/src/components/session-review.tsx +++ b/packages/ui/src/components/session-review.tsx @@ -8,11 +8,11 @@ import { LineComment, LineCommentEditor } from "./line-comment" import { StickyAccordionHeader } from "./sticky-accordion-header" import { useDiffComponent } from "../context/diff" import { useI18n } from "../context/i18n" -import { getDirectory, getFilename } from "@opencode-ai/util/path" -import { checksum } from "@opencode-ai/util/encode" +import { getDirectory, getFilename } from "@opencoder-ai/util/path" +import { checksum } from "@opencoder-ai/util/encode" import { createEffect, createMemo, createSignal, For, Match, Show, Switch, type JSX } from "solid-js" import { createStore } from "solid-js/store" -import { type FileContent, type FileDiff } from "@opencode-ai/sdk/v2" +import { type FileContent, type FileDiff } from "@opencoder-ai/sdk/v2" import { PreloadMultiFileDiffResult } from "@pierre/diffs/ssr" import { type SelectedLineRange } from "@pierre/diffs" import { Dynamic } from "solid-js/web" diff --git a/packages/ui/src/components/session-turn.tsx b/packages/ui/src/components/session-turn.tsx index 9ffa671e6985..e1b54b0c8373 100644 --- a/packages/ui/src/components/session-turn.tsx +++ b/packages/ui/src/components/session-turn.tsx @@ -7,11 +7,11 @@ import { type QuestionRequest, TextPart, ToolPart, -} from "@opencode-ai/sdk/v2/client" +} from "@opencoder-ai/sdk/v2/client" import { useData } from "../context" import { type UiI18nKey, type UiI18nParams, useI18n } from "../context/i18n" -import { Binary } from "@opencode-ai/util/binary" +import { Binary } from "@opencoder-ai/util/binary" import { createEffect, createMemo, createSignal, For, Match, on, onCleanup, ParentProps, Show, Switch } from "solid-js" import { Message, Part } from "./message-part" import { Markdown } from "./markdown" diff --git a/packages/ui/src/context/data.tsx b/packages/ui/src/context/data.tsx index 51bffa0502ad..117ff4e53cfb 100644 --- a/packages/ui/src/context/data.tsx +++ b/packages/ui/src/context/data.tsx @@ -7,7 +7,7 @@ import type { PermissionRequest, QuestionRequest, QuestionAnswer, -} from "@opencode-ai/sdk/v2" +} from "@opencoder-ai/sdk/v2" import { createSimpleContext } from "./helper" import { PreloadMultiFileDiffResult } from "@pierre/diffs/ssr" diff --git a/packages/util/package.json b/packages/util/package.json index f37bb5c1d174..b2a05465c72a 100644 --- a/packages/util/package.json +++ b/packages/util/package.json @@ -1,6 +1,6 @@ { - "name": "@opencode-ai/util", - "version": "1.1.65", + "name": "@opencoder-ai/util", + "version": "1.1.63", "private": true, "type": "module", "license": "MIT", diff --git a/packages/web/package.json b/packages/web/package.json index 7c6698117a79..aae94aed8d83 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -1,5 +1,5 @@ { - "name": "@opencode-ai/web", + "name": "@opencoder-ai/web", "type": "module", "license": "MIT", "version": "1.1.65", @@ -35,7 +35,7 @@ "vscode-languageserver-types": "3.17.5" }, "devDependencies": { - "opencode": "workspace:*", + "opencoder": "workspace:*", "@types/node": "catalog:", "@astrojs/check": "0.9.6", "typescript": "catalog:" diff --git a/packages/web/src/content/docs/custom-tools.mdx b/packages/web/src/content/docs/custom-tools.mdx index 80a19236995b..4b523021dd5b 100644 --- a/packages/web/src/content/docs/custom-tools.mdx +++ b/packages/web/src/content/docs/custom-tools.mdx @@ -26,8 +26,8 @@ They can be defined: The easiest way to create tools is using the `tool()` helper which provides type-safety and validation. -```ts title=".opencode/tools/database.ts" {1} -import { tool } from "@opencode-ai/plugin" +```ts title=".opencode/tool/database.ts" {1} +import { tool } from "@opencoder-ai/plugin" export default tool({ description: "Query the project database", @@ -49,8 +49,8 @@ The **filename** becomes the **tool name**. The above creates a `database` tool. You can also export multiple tools from a single file. Each export becomes **a separate tool** with the name **`_`**: -```ts title=".opencode/tools/math.ts" -import { tool } from "@opencode-ai/plugin" +```ts title=".opencode/tool/math.ts" +import { tool } from "@opencoder-ai/plugin" export const add = tool({ description: "Add two numbers", @@ -112,8 +112,8 @@ export default { Tools receive context about the current session: -```ts title=".opencode/tools/project.ts" {8} -import { tool } from "@opencode-ai/plugin" +```ts title=".opencode/tool/project.ts" {8} +import { tool } from "@opencoder-ai/plugin" export default tool({ description: "Get project information", @@ -149,8 +149,8 @@ print(a + b) Then create the tool definition that invokes it: -```ts title=".opencode/tools/python-add.ts" {10} -import { tool } from "@opencode-ai/plugin" +```ts title=".opencode/tool/python-add.ts" {10} +import { tool } from "@opencoder-ai/plugin" import path from "path" export default tool({ diff --git a/packages/web/src/content/docs/ecosystem.mdx b/packages/web/src/content/docs/ecosystem.mdx index 85839a2d82b8..f640b2fa6dc0 100644 --- a/packages/web/src/content/docs/ecosystem.mdx +++ b/packages/web/src/content/docs/ecosystem.mdx @@ -59,7 +59,7 @@ You can also check out [awesome-opencode](https://github.com/awesome-opencode/aw | [portal](https://github.com/hosenur/portal) | Mobile-first web UI for OpenCode over Tailscale/VPN | | [opencode plugin template](https://github.com/zenobi-us/opencode-plugin-template/) | Template for building OpenCode plugins | | [opencode.nvim](https://github.com/sudo-tee/opencode.nvim) | Neovim frontend for opencode - a terminal-based AI coding agent | -| [ai-sdk-provider-opencode-sdk](https://github.com/ben-vargas/ai-sdk-provider-opencode-sdk) | Vercel AI SDK provider for using OpenCode via @opencode-ai/sdk | +| [ai-sdk-provider-opencode-sdk](https://github.com/ben-vargas/ai-sdk-provider-opencode-sdk) | Vercel AI SDK provider for using OpenCode via @opencoder-ai/sdk | | [OpenChamber](https://github.com/btriapitsyn/openchamber) | Web / Desktop App and VS Code Extension for OpenCode | | [OpenCode-Obsidian](https://github.com/mtymek/opencode-obsidian) | Obsidian plugin that embeds OpenCode in Obsidian's UI | | [OpenWork](https://github.com/different-ai/openwork) | An open-source alternative to Claude Cowork, powered by OpenCode | diff --git a/packages/web/src/content/docs/plugins.mdx b/packages/web/src/content/docs/plugins.mdx index 411b827d22c2..4884bce902ef 100644 --- a/packages/web/src/content/docs/plugins.mdx +++ b/packages/web/src/content/docs/plugins.mdx @@ -128,7 +128,7 @@ The plugin function receives: For TypeScript plugins, you can import types from the plugin package: ```ts title="my-plugin.ts" {1} -import type { Plugin } from "@opencode-ai/plugin" +import type { Plugin } from "@opencoder-ai/plugin" export const MyPlugin: Plugin = async ({ project, client, $, directory, worktree }) => { return { @@ -279,8 +279,8 @@ export const InjectEnvPlugin = async () => { Plugins can also add custom tools to opencode: -```ts title=".opencode/plugins/custom-tools.ts" -import { type Plugin, tool } from "@opencode-ai/plugin" +```ts title=".opencode/plugin/custom-tools.ts" +import { type Plugin, tool } from "@opencoder-ai/plugin" export const CustomToolsPlugin: Plugin = async (ctx) => { return { @@ -335,8 +335,8 @@ Levels: `debug`, `info`, `warn`, `error`. See [SDK documentation](https://openco Customize the context included when a session is compacted: -```ts title=".opencode/plugins/compaction.ts" -import type { Plugin } from "@opencode-ai/plugin" +```ts title=".opencode/plugin/compaction.ts" +import type { Plugin } from "@opencoder-ai/plugin" export const CompactionPlugin: Plugin = async (ctx) => { return { @@ -359,8 +359,8 @@ The `experimental.session.compacting` hook fires before the LLM generates a cont You can also replace the compaction prompt entirely by setting `output.prompt`: -```ts title=".opencode/plugins/custom-compaction.ts" -import type { Plugin } from "@opencode-ai/plugin" +```ts title=".opencode/plugin/custom-compaction.ts" +import type { Plugin } from "@opencoder-ai/plugin" export const CustomCompactionPlugin: Plugin = async (ctx) => { return { diff --git a/packages/web/src/content/docs/sdk.mdx b/packages/web/src/content/docs/sdk.mdx index 24546213be51..4703ff43fc0a 100644 --- a/packages/web/src/content/docs/sdk.mdx +++ b/packages/web/src/content/docs/sdk.mdx @@ -18,7 +18,7 @@ Use it to build integrations and control opencode programmatically. Install the SDK from npm: ```bash -npm install @opencode-ai/sdk +npm install @opencoder-ai/sdk ``` --- @@ -28,7 +28,7 @@ npm install @opencode-ai/sdk Create an instance of opencode: ```javascript -import { createOpencode } from "@opencode-ai/sdk" +import { createOpencode } from "@opencoder-ai/sdk" const { client } = await createOpencode() ``` @@ -52,7 +52,7 @@ This starts both a server and a client You can pass a configuration object to customize behavior. The instance still picks up your `opencode.json`, but you can override or add configuration inline: ```javascript -import { createOpencode } from "@opencode-ai/sdk" +import { createOpencode } from "@opencoder-ai/sdk" const opencode = await createOpencode({ hostname: "127.0.0.1", @@ -72,7 +72,7 @@ opencode.server.close() If you already have a running instance of opencode, you can create a client instance to connect to it: ```javascript -import { createOpencodeClient } from "@opencode-ai/sdk" +import { createOpencodeClient } from "@opencoder-ai/sdk" const client = createOpencodeClient({ baseUrl: "http://localhost:4096", @@ -96,7 +96,7 @@ const client = createOpencodeClient({ The SDK includes TypeScript definitions for all API types. Import them directly: ```typescript -import type { Session, Message, Part } from "@opencode-ai/sdk" +import type { Session, Message, Part } from "@opencoder-ai/sdk" ``` All types are generated from the server's OpenAPI specification and available in the types file. diff --git a/script/changelog.ts b/script/changelog.ts index 5fc30a228bfb..4f523d38faeb 100755 --- a/script/changelog.ts +++ b/script/changelog.ts @@ -1,9 +1,9 @@ #!/usr/bin/env bun import { $ } from "bun" -import { createOpencode } from "@opencode-ai/sdk/v2" +import { createOpencode } from "@opencoder-ai/sdk" import { parseArgs } from "util" -import { Script } from "@opencode-ai/script" +import { Script } from "@opencoder-ai/script" type Release = { tag_name: string diff --git a/script/duplicate-pr.ts b/script/duplicate-pr.ts index b77737c1d417..81371342d844 100755 --- a/script/duplicate-pr.ts +++ b/script/duplicate-pr.ts @@ -2,7 +2,7 @@ import path from "path" import { pathToFileURL } from "bun" -import { createOpencode } from "@opencode-ai/sdk" +import { createOpencode } from "@opencoder-ai/sdk" import { parseArgs } from "util" async function main() { diff --git a/script/publish.ts b/script/publish.ts index 1294f8d793e1..2b064013fb26 100755 --- a/script/publish.ts +++ b/script/publish.ts @@ -1,7 +1,8 @@ #!/usr/bin/env bun import { $ } from "bun" -import { Script } from "@opencode-ai/script" +import { Script } from "@opencoder-ai/script" +import { buildNotes, getLatestRelease } from "./changelog" const highlightsTemplate = `