Files
orca/src/main/runtime/rpc/methods/folder-workspace.ts
T
2026-06-11 02:34:01 -07:00

99 lines
3.3 KiB
TypeScript

import { z } from 'zod'
import { defineMethod, type RpcMethod } from '../core'
import { OptionalFiniteNumber, OptionalString, requiredString } from '../schemas'
import { isTuiAgent } from '../../../../shared/tui-agent-config'
const FolderWorkspaceLinkedTask = z
.object({
provider: z.enum(['github', 'gitlab', 'linear', 'jira']),
type: z.enum(['issue', 'pr', 'mr']),
number: z.number().finite(),
title: requiredString('Missing linked task title'),
url: requiredString('Missing linked task URL'),
linearIdentifier: OptionalString,
jiraIdentifier: OptionalString,
repoId: OptionalString
})
.nullable()
const FolderWorkspaceCreate = z.object({
projectGroupId: requiredString('Missing project group id'),
name: OptionalString,
folderPath: OptionalString.nullable().optional(),
connectionId: OptionalString.nullable().optional(),
linkedTask: FolderWorkspaceLinkedTask.optional(),
createdWithAgent: z.string().refine(isTuiAgent).optional(),
pendingFirstAgentMessageRename: z.boolean().optional()
})
const FolderWorkspaceUpdate = z.object({
folderWorkspaceId: requiredString('Missing folder workspace id'),
updates: z.object({
name: OptionalString,
folderPath: OptionalString,
linkedTask: FolderWorkspaceLinkedTask.optional(),
comment: z.string().optional(),
isArchived: z.boolean().optional(),
isUnread: z.boolean().optional(),
isPinned: z.boolean().optional(),
sortOrder: OptionalFiniteNumber,
manualOrder: OptionalFiniteNumber,
workspaceStatus: OptionalString,
createdWithAgent: z.string().refine(isTuiAgent).optional(),
pendingFirstAgentMessageRename: z.boolean().optional(),
firstAgentMessageRenameError: z.string().nullable().optional(),
lastActivityAt: OptionalFiniteNumber
})
})
const FolderWorkspaceSelector = z.object({
folderWorkspaceId: requiredString('Missing folder workspace id')
})
const FolderWorkspacePathStatus = z.discriminatedUnion('scope', [
z.object({
scope: z.literal('folder-workspace'),
folderWorkspaceId: requiredString('Missing folder workspace id')
}),
z.object({
scope: z.literal('project-group'),
projectGroupId: requiredString('Missing project group id')
})
])
export const FOLDER_WORKSPACE_METHODS: RpcMethod[] = [
defineMethod({
name: 'folderWorkspace.list',
params: null,
handler: (_params, { runtime }) => ({
folderWorkspaces: runtime.listFolderWorkspaces()
})
}),
defineMethod({
name: 'folderWorkspace.create',
params: FolderWorkspaceCreate,
handler: async (params, { runtime }) => ({
folderWorkspace: await runtime.createFolderWorkspace(params)
})
}),
defineMethod({
name: 'folderWorkspace.update',
params: FolderWorkspaceUpdate,
handler: async (params, { runtime }) => ({
folderWorkspace: await runtime.updateFolderWorkspace(params.folderWorkspaceId, params.updates)
})
}),
defineMethod({
name: 'folderWorkspace.delete',
params: FolderWorkspaceSelector,
handler: async (params, { runtime }) => runtime.deleteFolderWorkspace(params.folderWorkspaceId)
}),
defineMethod({
name: 'folderWorkspace.getPathStatus',
params: FolderWorkspacePathStatus,
handler: async (params, { runtime }) => ({
status: await runtime.getFolderWorkspacePathStatus(params)
})
})
]