From d178d8249ffb0e2c9b9657d522137177e3bab7cc Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" Date: Thu, 19 Mar 2026 14:00:32 +0000 Subject: [PATCH] chore: generate --- .../app/e2e/projects/projects-switch.spec.ts | 10 ++- packages/app/src/pages/layout.tsx | 6 +- packages/app/src/pages/layout/helpers.ts | 6 +- packages/app/src/pages/session.tsx | 11 +++- .../src/pages/session/session-side-panel.tsx | 8 +-- .../opencode/test/project/project.test.ts | 62 +++++++++---------- packages/sdk/openapi.json | 59 +++++++++++++++++- 7 files changed, 118 insertions(+), 44 deletions(-) diff --git a/packages/app/e2e/projects/projects-switch.spec.ts b/packages/app/e2e/projects/projects-switch.spec.ts index 1416aec72..e9cbf868d 100644 --- a/packages/app/e2e/projects/projects-switch.spec.ts +++ b/packages/app/e2e/projects/projects-switch.spec.ts @@ -1,7 +1,15 @@ import { base64Decode } from "@opencode-ai/util/encode" import type { Page } from "@playwright/test" import { test, expect } from "../fixtures" -import { defocus, createTestProject, cleanupTestProject, openSidebar, sessionIDFromUrl, waitDir, waitSlug } from "../actions" +import { + defocus, + createTestProject, + cleanupTestProject, + openSidebar, + sessionIDFromUrl, + waitDir, + waitSlug, +} from "../actions" import { projectSwitchSelector, promptSelector, workspaceItemSelector, workspaceNewSessionSelector } from "../selectors" import { dirSlug, resolveDirectory } from "../utils" diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index cca14fd50..52ac7c5f3 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -633,7 +633,8 @@ export default function Layout(props: ParentProps) { if (!expanded) continue const key = workspaceKey(directory) const project = projects.find( - (item) => workspaceKey(item.worktree) === key || item.sandboxes?.some((sandbox) => workspaceKey(sandbox) === key), + (item) => + workspaceKey(item.worktree) === key || item.sandboxes?.some((sandbox) => workspaceKey(sandbox) === key), ) if (!project) continue if (project.vcs === "git" && layout.sidebar.workspaces(project.worktree)()) continue @@ -1163,7 +1164,8 @@ export default function Layout(props: ParentProps) { const project = layout.projects .list() .find( - (item) => workspaceKey(item.worktree) === key || item.sandboxes?.some((sandbox) => workspaceKey(sandbox) === key), + (item) => + workspaceKey(item.worktree) === key || item.sandboxes?.some((sandbox) => workspaceKey(sandbox) === key), ) if (project) return project.worktree diff --git a/packages/app/src/pages/layout/helpers.ts b/packages/app/src/pages/layout/helpers.ts index 886ffd26a..209cff8a7 100644 --- a/packages/app/src/pages/layout/helpers.ts +++ b/packages/app/src/pages/layout/helpers.ts @@ -31,11 +31,13 @@ function sortSessions(now: number) { const isRootVisibleSession = (session: Session, directory: string) => workspaceKey(session.directory) === workspaceKey(directory) && !session.parentID && !session.time?.archived -const roots = (store: SessionStore) => (store.session ?? []).filter((session) => isRootVisibleSession(session, store.path.directory)) +const roots = (store: SessionStore) => + (store.session ?? []).filter((session) => isRootVisibleSession(session, store.path.directory)) export const sortedRootSessions = (store: SessionStore, now: number) => roots(store).sort(sortSessions(now)) -export const latestRootSession = (stores: SessionStore[], now: number) => stores.flatMap(roots).sort(sortSessions(now))[0] +export const latestRootSession = (stores: SessionStore[], now: number) => + stores.flatMap(roots).sort(sortSessions(now))[0] export function hasProjectPermissions( request: Record, diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx index 6fe2e56b8..11d1481c0 100644 --- a/packages/app/src/pages/session.tsx +++ b/packages/app/src/pages/session.tsx @@ -599,7 +599,12 @@ export default function Page() { const list: ChangeMode[] = [] const git = sync.project?.vcs === "git" if (git) list.push("git") - if (git && sync.data.vcs?.branch && sync.data.vcs?.default_branch && sync.data.vcs.branch !== sync.data.vcs.default_branch) { + if ( + git && + sync.data.vcs?.branch && + sync.data.vcs?.default_branch && + sync.data.vcs.branch !== sync.data.vcs.default_branch + ) { list.push("branch") } list.push("session", "turn") @@ -961,7 +966,9 @@ export default function Page() { const mobileChanges = createMemo(() => !isDesktop() && store.mobileTab === "changes") const wantsReview = createMemo(() => - isDesktop() ? desktopFileTreeOpen() || (desktopReviewOpen() && activeTab() === "review") : store.mobileTab === "changes", + isDesktop() + ? desktopFileTreeOpen() || (desktopReviewOpen() && activeTab() === "review") + : store.mobileTab === "changes", ) createEffect(() => { diff --git a/packages/app/src/pages/session/session-side-panel.tsx b/packages/app/src/pages/session/session-side-panel.tsx index ed90c97dc..3ba619736 100644 --- a/packages/app/src/pages/session/session-side-panel.tsx +++ b/packages/app/src/pages/session/session-side-panel.tsx @@ -366,7 +366,9 @@ export function SessionSidePanel(props: { {props.reviewCount()}{" "} - {language.t(props.reviewCount() === 1 ? "session.review.change.one" : "session.review.change.other")} + {language.t( + props.reviewCount() === 1 ? "session.review.change.one" : "session.review.change.other", + )} {language.t("session.files.all")} @@ -395,9 +397,7 @@ export function SessionSidePanel(props: { /> - - {empty(props.empty())} - + {empty(props.empty())} diff --git a/packages/opencode/test/project/project.test.ts b/packages/opencode/test/project/project.test.ts index 43c86c32e..e6588fb38 100644 --- a/packages/opencode/test/project/project.test.ts +++ b/packages/opencode/test/project/project.test.ts @@ -20,37 +20,37 @@ mock.module("../../src/git", () => ({ Git: { ...gitModule.Git, run: (args: string[], opts: { cwd: string; env?: Record }) => { - const cmd = ["git", ...args].join(" ") - if ( - mode === "rev-list-fail" && - cmd.includes("git rev-list") && - cmd.includes("--max-parents=0") && - cmd.includes("HEAD") - ) { - return Promise.resolve({ - exitCode: 128, - text: () => "", - stdout: Buffer.from(""), - stderr: Buffer.from("fatal"), - }) - } - if (mode === "top-fail" && cmd.includes("git rev-parse") && cmd.includes("--show-toplevel")) { - return Promise.resolve({ - exitCode: 128, - text: () => "", - stdout: Buffer.from(""), - stderr: Buffer.from("fatal"), - }) - } - if (mode === "common-dir-fail" && cmd.includes("git rev-parse") && cmd.includes("--git-common-dir")) { - return Promise.resolve({ - exitCode: 128, - text: () => "", - stdout: Buffer.from(""), - stderr: Buffer.from("fatal"), - }) - } - return originalGit(args, opts) + const cmd = ["git", ...args].join(" ") + if ( + mode === "rev-list-fail" && + cmd.includes("git rev-list") && + cmd.includes("--max-parents=0") && + cmd.includes("HEAD") + ) { + return Promise.resolve({ + exitCode: 128, + text: () => "", + stdout: Buffer.from(""), + stderr: Buffer.from("fatal"), + }) + } + if (mode === "top-fail" && cmd.includes("git rev-parse") && cmd.includes("--show-toplevel")) { + return Promise.resolve({ + exitCode: 128, + text: () => "", + stdout: Buffer.from(""), + stderr: Buffer.from("fatal"), + }) + } + if (mode === "common-dir-fail" && cmd.includes("git rev-parse") && cmd.includes("--git-common-dir")) { + return Promise.resolve({ + exitCode: 128, + text: () => "", + stdout: Buffer.from(""), + stderr: Buffer.from("fatal"), + }) + } + return originalGit(args, opts) }, }, })) diff --git a/packages/sdk/openapi.json b/packages/sdk/openapi.json index 350395423..41819ef12 100644 --- a/packages/sdk/openapi.json +++ b/packages/sdk/openapi.json @@ -6576,6 +6576,59 @@ ] } }, + "/vcs/diff": { + "get": { + "operationId": "vcs.diff", + "parameters": [ + { + "in": "query", + "name": "directory", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "workspace", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "mode", + "schema": { + "type": "string", + "enum": ["git", "branch"] + }, + "required": true + } + ], + "summary": "Get VCS diff", + "description": "Retrieve the current git diff for the working tree or against the default branch.", + "responses": { + "200": { + "description": "VCS diff", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FileDiff" + } + } + } + } + } + }, + "x-codeSamples": [ + { + "lang": "js", + "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.vcs.diff({\n ...\n})" + } + ] + } + }, "/command": { "get": { "operationId": "command.list", @@ -11928,9 +11981,11 @@ "properties": { "branch": { "type": "string" + }, + "default_branch": { + "type": "string" } - }, - "required": ["branch"] + } }, "Command": { "type": "object",