43 lines
1.6 KiB
TypeScript
43 lines
1.6 KiB
TypeScript
import type { ExecutionWorkspaceMode, ProjectExecutionWorkspaceDefaultMode } from "@paperclipai/shared";
|
|
|
|
type ProjectWorkspaceDefaultSource = {
|
|
workspaces?: Array<{ id: string; isPrimary: boolean }>;
|
|
executionWorkspacePolicy?: {
|
|
enabled?: boolean;
|
|
defaultMode?: ProjectExecutionWorkspaceDefaultMode | string | null;
|
|
defaultProjectWorkspaceId?: string | null;
|
|
} | null;
|
|
} | null | undefined;
|
|
|
|
export function defaultProjectWorkspaceIdForProject(project: ProjectWorkspaceDefaultSource) {
|
|
if (!project) return "";
|
|
return project.executionWorkspacePolicy?.defaultProjectWorkspaceId
|
|
?? project.workspaces?.find((workspace) => workspace.isPrimary)?.id
|
|
?? project.workspaces?.[0]?.id
|
|
?? "";
|
|
}
|
|
|
|
export function defaultExecutionWorkspaceModeForProject(project: ProjectWorkspaceDefaultSource): ExecutionWorkspaceMode {
|
|
const defaultMode = project?.executionWorkspacePolicy?.enabled ? project.executionWorkspacePolicy.defaultMode : null;
|
|
if (
|
|
defaultMode === "isolated_workspace" ||
|
|
defaultMode === "operator_branch" ||
|
|
defaultMode === "adapter_default"
|
|
) {
|
|
return defaultMode === "adapter_default" ? "agent_default" : defaultMode;
|
|
}
|
|
return "shared_workspace";
|
|
}
|
|
|
|
export function issueExecutionWorkspaceModeForExistingWorkspace(
|
|
mode: string | null | undefined,
|
|
): ExecutionWorkspaceMode {
|
|
if (mode === "isolated_workspace" || mode === "operator_branch" || mode === "shared_workspace") {
|
|
return mode;
|
|
}
|
|
if (mode === "adapter_managed" || mode === "cloud_sandbox") {
|
|
return "agent_default";
|
|
}
|
|
return "shared_workspace";
|
|
}
|