Files
orca/src/shared/project-move-pause.ts
T
Neil cd59239927 fix(workspaces): add main-owned project move pause barrier (#32940)
* fix(workspaces): add main-owned project move pause barrier

* test(workspaces): type project move pause reply fixtures
2026-10-23 17:25:22 -07:00

39 lines
1.1 KiB
TypeScript

import { z } from 'zod'
export const PROJECT_MOVE_PAUSE_PROTOCOL = 1
export type ProjectMovePauseRequest = { requestId: string; protocol: 1 } & (
| { phase: 'prepare'; worktreeIds: string[] }
| { phase: 'persist'; successfulWorktreeIds: string[] }
| { phase: 'release' }
)
const host = z.discriminatedUnion('kind', [
z.object({ kind: z.literal('self') }),
z.object({ kind: z.literal('environment'), environmentId: z.string().min(1) })
])
export const projectMovePauseResponseSchema = z.discriminatedUnion('phase', [
z.object({
requestId: z.string(),
protocol: z.literal(PROJECT_MOVE_PAUSE_PROTOCOL),
phase: z.literal('prepare'),
targets: z.array(
z.object({ worktreeId: z.string(), terminalHost: host, chatHosts: z.array(host) })
)
}),
z.object({
requestId: z.string(),
protocol: z.literal(PROJECT_MOVE_PAUSE_PROTOCOL),
phase: z.literal('persist')
}),
z.object({
requestId: z.string(),
protocol: z.literal(PROJECT_MOVE_PAUSE_PROTOCOL),
phase: z.literal('error'),
error: z.string()
})
])
export type ProjectMovePauseResponse = z.infer<typeof projectMovePauseResponseSchema>