mirror of
https://github.com/stablyai/orca.git
synced 2026-10-16 08:03:09 +00:00
138 lines
3.7 KiB
TypeScript
138 lines
3.7 KiB
TypeScript
import type { TuiAgent } from '../../../src/shared/types'
|
|
import { resolveMobileWorkspaceCreateName } from './mobile-workspace-name'
|
|
import type { WorkspaceAgentChoice } from './workspace-agent-selection'
|
|
|
|
export type WorkspaceCreateSetupDecision = 'inherit' | 'run' | 'skip'
|
|
|
|
export type WorkspaceCreateSparseCheckout = {
|
|
directories: string[]
|
|
presetId?: string
|
|
}
|
|
|
|
export type WorkspaceCreateGitPushTarget = {
|
|
remoteName: string
|
|
branchName: string
|
|
remoteUrl?: string
|
|
}
|
|
|
|
export type WorkspaceCreateHostedStartPoint = {
|
|
baseBranch: string
|
|
pushTarget?: WorkspaceCreateGitPushTarget
|
|
}
|
|
|
|
type WorkspaceCreateGitHubItem = {
|
|
provider: 'github'
|
|
source: {
|
|
type: 'issue' | 'pr'
|
|
repoId: string
|
|
number: number
|
|
title: string
|
|
url: string
|
|
}
|
|
}
|
|
|
|
type WorkspaceCreateGitLabItem = {
|
|
provider: 'gitlab'
|
|
source: {
|
|
type: 'issue' | 'mr'
|
|
repoId: string
|
|
number: number
|
|
title: string
|
|
url: string
|
|
}
|
|
}
|
|
|
|
type WorkspaceCreateLinearItem = {
|
|
provider: 'linear'
|
|
source: {
|
|
identifier: string
|
|
title: string
|
|
url: string
|
|
}
|
|
}
|
|
|
|
export type WorkspaceCreateTaskItem =
|
|
| WorkspaceCreateGitHubItem
|
|
| WorkspaceCreateGitLabItem
|
|
| WorkspaceCreateLinearItem
|
|
|
|
export type WorkspaceCreateParams = Record<string, unknown>
|
|
|
|
export function buildTaskWorkspaceCreateParams(args: {
|
|
item: WorkspaceCreateTaskItem
|
|
targetRepoId: string
|
|
setupDecision: WorkspaceCreateSetupDecision
|
|
agent?: WorkspaceAgentChoice
|
|
workspaceName?: string
|
|
note?: string
|
|
baseBranch?: string
|
|
branchNameOverride?: string
|
|
sparseCheckout?: WorkspaceCreateSparseCheckout
|
|
hostedStartPoint?: WorkspaceCreateHostedStartPoint
|
|
}): WorkspaceCreateParams {
|
|
const {
|
|
item,
|
|
targetRepoId,
|
|
setupDecision,
|
|
agent,
|
|
workspaceName,
|
|
note,
|
|
baseBranch,
|
|
branchNameOverride,
|
|
sparseCheckout,
|
|
hostedStartPoint
|
|
} = args
|
|
const shouldLaunchAgent = agent !== 'blank'
|
|
const createdWithAgent = shouldLaunchAgent ? (agent as TuiAgent) : undefined
|
|
const comment = note?.trim()
|
|
const selectedBaseBranch = baseBranch || hostedStartPoint?.baseBranch
|
|
const common = {
|
|
setupDecision,
|
|
activate: true,
|
|
...(shouldLaunchAgent ? { startupDraft: item.source.url } : {}),
|
|
...(createdWithAgent ? { createdWithAgent } : {}),
|
|
...(selectedBaseBranch ? { baseBranch: selectedBaseBranch } : {}),
|
|
...(branchNameOverride ? { branchNameOverride } : {}),
|
|
...(hostedStartPoint?.pushTarget ? { pushTarget: hostedStartPoint.pushTarget } : {}),
|
|
...(sparseCheckout ? { sparseCheckout } : {}),
|
|
...(comment ? { comment } : {})
|
|
}
|
|
|
|
if (item.provider === 'github') {
|
|
const fallback = `${item.source.type}-${item.source.number}`
|
|
return {
|
|
repo: `id:${item.source.repoId}`,
|
|
name: resolveMobileWorkspaceCreateName({ draft: workspaceName, fallback }),
|
|
displayName: item.source.title,
|
|
...common,
|
|
...(item.source.type === 'issue'
|
|
? { linkedIssue: item.source.number }
|
|
: { linkedPR: item.source.number })
|
|
}
|
|
}
|
|
|
|
if (item.provider === 'gitlab') {
|
|
const fallback = `${item.source.type}-${item.source.number}`
|
|
return {
|
|
repo: `id:${item.source.repoId}`,
|
|
name: resolveMobileWorkspaceCreateName({ draft: workspaceName, fallback }),
|
|
displayName: item.source.title,
|
|
...common,
|
|
...(item.source.type === 'issue'
|
|
? { linkedGitLabIssue: item.source.number }
|
|
: { linkedGitLabMR: item.source.number })
|
|
}
|
|
}
|
|
|
|
return {
|
|
repo: `id:${targetRepoId}`,
|
|
name: resolveMobileWorkspaceCreateName({
|
|
draft: workspaceName,
|
|
fallback: item.source.identifier.toLowerCase()
|
|
}),
|
|
displayName: item.source.title,
|
|
linkedLinearIssue: item.source.identifier,
|
|
...common
|
|
}
|
|
}
|