summaryrefslogtreecommitdiffhomepage
path: root/packages/sdk
diff options
context:
space:
mode:
authorJames Long <[email protected]>2026-02-27 15:36:39 -0500
committerGitHub <[email protected]>2026-02-27 15:36:39 -0500
commitc12ce2ffff38fae11e22762292c56f1e71c387e7 (patch)
tree1e22a3936daafc28bf14f7a2f556919058e61f6f /packages/sdk
parenta94f564ff00cc16cc22503c29fa093d99844ae1a (diff)
downloadopencode-c12ce2ffff38fae11e22762292c56f1e71c387e7.tar.gz
opencode-c12ce2ffff38fae11e22762292c56f1e71c387e7.zip
feat(core): basic implementation of remote workspace support (#15120)
Diffstat (limited to 'packages/sdk')
-rw-r--r--packages/sdk/js/src/v2/gen/sdk.gen.ts111
-rw-r--r--packages/sdk/js/src/v2/gen/types.gen.ts147
2 files changed, 241 insertions, 17 deletions
diff --git a/packages/sdk/js/src/v2/gen/sdk.gen.ts b/packages/sdk/js/src/v2/gen/sdk.gen.ts
index 6165c0f7b..ec8ee4685 100644
--- a/packages/sdk/js/src/v2/gen/sdk.gen.ts
+++ b/packages/sdk/js/src/v2/gen/sdk.gen.ts
@@ -26,6 +26,11 @@ import type {
EventTuiToastShow,
ExperimentalResourceListResponses,
ExperimentalSessionListResponses,
+ ExperimentalWorkspaceCreateErrors,
+ ExperimentalWorkspaceCreateResponses,
+ ExperimentalWorkspaceListResponses,
+ ExperimentalWorkspaceRemoveErrors,
+ ExperimentalWorkspaceRemoveResponses,
FileListResponses,
FilePartInput,
FilePartSource,
@@ -901,6 +906,107 @@ export class Worktree extends HeyApiClient {
}
}
+export class Workspace extends HeyApiClient {
+ /**
+ * Remove workspace
+ *
+ * Remove an existing workspace.
+ */
+ public remove<ThrowOnError extends boolean = false>(
+ parameters: {
+ id: string
+ directory?: string
+ },
+ options?: Options<never, ThrowOnError>,
+ ) {
+ const params = buildClientParams(
+ [parameters],
+ [
+ {
+ args: [
+ { in: "path", key: "id" },
+ { in: "query", key: "directory" },
+ ],
+ },
+ ],
+ )
+ return (options?.client ?? this.client).delete<
+ ExperimentalWorkspaceRemoveResponses,
+ ExperimentalWorkspaceRemoveErrors,
+ ThrowOnError
+ >({
+ url: "/experimental/workspace/{id}",
+ ...options,
+ ...params,
+ })
+ }
+
+ /**
+ * Create workspace
+ *
+ * Create a workspace for the current project.
+ */
+ public create<ThrowOnError extends boolean = false>(
+ parameters: {
+ id: string
+ directory?: string
+ branch?: string | null
+ config?: {
+ directory: string
+ type: "worktree"
+ }
+ },
+ options?: Options<never, ThrowOnError>,
+ ) {
+ const params = buildClientParams(
+ [parameters],
+ [
+ {
+ args: [
+ { in: "path", key: "id" },
+ { in: "query", key: "directory" },
+ { in: "body", key: "branch" },
+ { in: "body", key: "config" },
+ ],
+ },
+ ],
+ )
+ return (options?.client ?? this.client).post<
+ ExperimentalWorkspaceCreateResponses,
+ ExperimentalWorkspaceCreateErrors,
+ ThrowOnError
+ >({
+ url: "/experimental/workspace/{id}",
+ ...options,
+ ...params,
+ headers: {
+ "Content-Type": "application/json",
+ ...options?.headers,
+ ...params.headers,
+ },
+ })
+ }
+
+ /**
+ * List workspaces
+ *
+ * List all workspaces.
+ */
+ public list<ThrowOnError extends boolean = false>(
+ parameters?: {
+ directory?: string
+ },
+ options?: Options<never, ThrowOnError>,
+ ) {
+ const params = buildClientParams([parameters], [{ args: [{ in: "query", key: "directory" }] }])
+ return (options?.client ?? this.client).get<ExperimentalWorkspaceListResponses, unknown, ThrowOnError>({
+ url: "/experimental/workspace",
+ ...options,
+ ...params,
+ })
+ }
+}
+
export class Session extends HeyApiClient {
/**
* List sessions
@@ -965,6 +1071,11 @@ export class Resource extends HeyApiClient {
}
export class Experimental extends HeyApiClient {
+ private _workspace?: Workspace
+ get workspace(): Workspace {
+ return (this._workspace ??= new Workspace({ client: this.client }))
+ }
+
private _session?: Session
get session(): Session {
return (this._session ??= new Session({ client: this.client }))
diff --git a/packages/sdk/js/src/v2/gen/types.gen.ts b/packages/sdk/js/src/v2/gen/types.gen.ts
index be6c00cf4..385de2cc8 100644
--- a/packages/sdk/js/src/v2/gen/types.gen.ts
+++ b/packages/sdk/js/src/v2/gen/types.gen.ts
@@ -887,6 +887,35 @@ export type EventVcsBranchUpdated = {
}
}
+export type EventWorktreeReady = {
+ type: "worktree.ready"
+ properties: {
+ name: string
+ branch: string
+ }
+}
+
+export type EventWorktreeFailed = {
+ type: "worktree.failed"
+ properties: {
+ message: string
+ }
+}
+
+export type EventWorkspaceReady = {
+ type: "workspace.ready"
+ properties: {
+ name: string
+ }
+}
+
+export type EventWorkspaceFailed = {
+ type: "workspace.failed"
+ properties: {
+ message: string
+ }
+}
+
export type Pty = {
id: string
title: string
@@ -926,21 +955,6 @@ export type EventPtyDeleted = {
}
}
-export type EventWorktreeReady = {
- type: "worktree.ready"
- properties: {
- name: string
- branch: string
- }
-}
-
-export type EventWorktreeFailed = {
- type: "worktree.failed"
- properties: {
- message: string
- }
-}
-
export type Event =
| EventInstallationUpdated
| EventInstallationUpdateAvailable
@@ -979,12 +993,14 @@ export type Event =
| EventSessionDiff
| EventSessionError
| EventVcsBranchUpdated
+ | EventWorktreeReady
+ | EventWorktreeFailed
+ | EventWorkspaceReady
+ | EventWorkspaceFailed
| EventPtyCreated
| EventPtyUpdated
| EventPtyExited
| EventPtyDeleted
- | EventWorktreeReady
- | EventWorktreeFailed
export type GlobalEvent = {
directory: string
@@ -1627,6 +1643,16 @@ export type WorktreeCreateInput = {
startCommand?: string
}
+export type Workspace = {
+ id: string
+ branch: string | null
+ projectID: string
+ config: {
+ directory: string
+ type: "worktree"
+ }
+}
+
export type WorktreeRemoveInput = {
directory: string
}
@@ -2473,6 +2499,93 @@ export type WorktreeCreateResponses = {
export type WorktreeCreateResponse = WorktreeCreateResponses[keyof WorktreeCreateResponses]
+export type ExperimentalWorkspaceRemoveData = {
+ body?: never
+ path: {
+ id: string
+ }
+ query?: {
+ directory?: string
+ }
+ url: "/experimental/workspace/{id}"
+}
+
+export type ExperimentalWorkspaceRemoveErrors = {
+ /**
+ * Bad request
+ */
+ 400: BadRequestError
+}
+
+export type ExperimentalWorkspaceRemoveError =
+ ExperimentalWorkspaceRemoveErrors[keyof ExperimentalWorkspaceRemoveErrors]
+
+export type ExperimentalWorkspaceRemoveResponses = {
+ /**
+ * Workspace removed
+ */
+ 200: Workspace
+}
+
+export type ExperimentalWorkspaceRemoveResponse =
+ ExperimentalWorkspaceRemoveResponses[keyof ExperimentalWorkspaceRemoveResponses]
+
+export type ExperimentalWorkspaceCreateData = {
+ body?: {
+ branch: string | null
+ config: {
+ directory: string
+ type: "worktree"
+ }
+ }
+ path: {
+ id: string
+ }
+ query?: {
+ directory?: string
+ }
+ url: "/experimental/workspace/{id}"
+}
+
+export type ExperimentalWorkspaceCreateErrors = {
+ /**
+ * Bad request
+ */
+ 400: BadRequestError
+}
+
+export type ExperimentalWorkspaceCreateError =
+ ExperimentalWorkspaceCreateErrors[keyof ExperimentalWorkspaceCreateErrors]
+
+export type ExperimentalWorkspaceCreateResponses = {
+ /**
+ * Workspace created
+ */
+ 200: Workspace
+}
+
+export type ExperimentalWorkspaceCreateResponse =
+ ExperimentalWorkspaceCreateResponses[keyof ExperimentalWorkspaceCreateResponses]
+
+export type ExperimentalWorkspaceListData = {
+ body?: never
+ path?: never
+ query?: {
+ directory?: string
+ }
+ url: "/experimental/workspace"
+}
+
+export type ExperimentalWorkspaceListResponses = {
+ /**
+ * Workspaces
+ */
+ 200: Array<Workspace>
+}
+
+export type ExperimentalWorkspaceListResponse =
+ ExperimentalWorkspaceListResponses[keyof ExperimentalWorkspaceListResponses]
+
export type WorktreeResetData = {
body?: WorktreeResetInput
path?: never