feat(core): basic implementation of remote workspace support (#15120)

This commit is contained in:
James Long
2026-02-27 15:36:39 -05:00
committed by GitHub
parent a94f564ff0
commit c12ce2ffff
26 changed files with 2153 additions and 65 deletions
@@ -0,0 +1,10 @@
import { WorktreeAdaptor } from "./worktree"
import type { Config } from "../config"
import type { Adaptor } from "./types"
export function getAdaptor(config: Config): Adaptor {
switch (config.type) {
case "worktree":
return WorktreeAdaptor
}
}
@@ -0,0 +1,7 @@
import type { Config } from "../config"
export type Adaptor<T extends Config = Config> = {
create(from: T, branch?: string | null): Promise<{ config: T; init: () => Promise<void> }>
remove(from: T): Promise<void>
request(from: T, method: string, url: string, data?: BodyInit, signal?: AbortSignal): Promise<Response | undefined>
}
@@ -0,0 +1,26 @@
import { Worktree } from "@/worktree"
import type { Config } from "../config"
import type { Adaptor } from "./types"
type WorktreeConfig = Extract<Config, { type: "worktree" }>
export const WorktreeAdaptor: Adaptor<WorktreeConfig> = {
async create(_from: WorktreeConfig, _branch: string) {
const next = await Worktree.create(undefined)
return {
config: {
type: "worktree",
directory: next.directory,
},
// Hack for now: `Worktree.create` puts all its async code in a
// `setTimeout` so it doesn't use this, but we should change that
init: async () => {},
}
},
async remove(config: WorktreeConfig) {
await Worktree.remove({ directory: config.directory })
},
async request(_from: WorktreeConfig, _method: string, _url: string, _data?: BodyInit, _signal?: AbortSignal) {
throw new Error("worktree does not support request")
},
}