feat(workbench): refine dynamic task collaboration
This commit is contained in:
@@ -2,7 +2,7 @@ import { z } from "zod";
|
||||
|
||||
const id = z.string().regex(/^[a-zA-Z0-9_-]{1,64}$/);
|
||||
const schema = z.object({
|
||||
schema_version: z.literal("execution-plan@1"),
|
||||
schema_version: z.enum(["execution-plan@1", "execution-plan@2"]),
|
||||
session_id: z.string().min(1),
|
||||
revision: z.number().int().positive(),
|
||||
updated_at: z.string().datetime(),
|
||||
@@ -12,9 +12,12 @@ const schema = z.object({
|
||||
id, title: z.string().min(1).max(120),
|
||||
status: z.enum(["pending", "running", "waiting", "completed", "failed", "skipped", "cancelled"]),
|
||||
owner: z.enum(["agent", "human"]),
|
||||
detail: z.string().max(2000), evidence: z.array(z.string().min(1).max(1000)).max(12)
|
||||
detail: z.string().max(2000), evidence: z.array(z.string().min(1).max(1000)).max(12),
|
||||
kind: z.enum(["activity", "decision", "parallel_split", "parallel_join", "gate"]).optional(),
|
||||
selected_edge_id: id.nullable().optional(), gate_ref: z.string().uuid().nullable().optional(),
|
||||
revisits_node_id: id.nullable().optional()
|
||||
})).min(1).max(40),
|
||||
edges: z.array(z.object({ from: id, to: id, label: z.string().max(120) })).max(80)
|
||||
edges: z.array(z.object({ id: id.optional(), from: id, to: id, label: z.string().max(120) })).max(80)
|
||||
}).refine((plan) => {
|
||||
const ids = new Set(plan.nodes.map((node) => node.id));
|
||||
return ids.size === plan.nodes.length && plan.edges.every((edge) => ids.has(edge.from) && ids.has(edge.to) && edge.from !== edge.to);
|
||||
|
||||
Reference in New Issue
Block a user