Files
PaperClipAI/packages/shared/src/validators/task-workspace.ts
T
DottaandPaperclip ec2210e4f8 feat: give tasks durable project-optional workspaces
Separate task organization from filesystem ownership. Add channel defaults, workspace and repository tools, safe admission transitions, and sparse native workspace persistence.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-09 21:19:25 -05:00

16 lines
984 B
TypeScript

import { z } from "zod";
export const taskWorkspaceSelectionSchema = z.discriminatedUnion("kind", [
z.object({ kind: z.literal("task_directory") }).strict(),
z.object({ kind: z.literal("existing"), workspaceId: z.string().uuid() }).strict(),
z.object({ kind: z.literal("configured_source"), projectWorkspaceId: z.string().uuid(), mode: z.enum(["shared", "managed_isolated"]) }).strict(),
]);
export const taskWorkspaceIntentSchema = z.object({
version: z.literal(1), request: z.object({ key: z.string().min(1).max(200), expectedBindingRevision: z.number().int().nonnegative() }).strict().optional(), selection: taskWorkspaceSelectionSchema,
source: z.enum(["explicit", "parent", "channel", "project", "operator_cwd", "task_default", "legacy"]),
}).strict();
export const selectTaskWorkspaceSchema = z.object({
selection: taskWorkspaceSelectionSchema,
expectedBindingRevision: z.number().int().nonnegative(),
requestKey: z.string().trim().min(1).max(200),
}).strict();