import { z } from "zod"; import { AGENT_ADAPTER_TYPES, AGENT_ROLES, AGENT_STATUSES, } from "../constants.js"; export const agentPermissionsSchema = z.object({ canCreateAgents: z.boolean().optional().default(false), }); export const createAgentSchema = z.object({ name: z.string().min(1), role: z.enum(AGENT_ROLES).optional().default("general"), title: z.string().optional().nullable(), reportsTo: z.string().uuid().optional().nullable(), capabilities: z.string().optional().nullable(), adapterType: z.enum(AGENT_ADAPTER_TYPES).optional().default("process"), adapterConfig: z.record(z.unknown()).optional().default({}), runtimeConfig: z.record(z.unknown()).optional().default({}), budgetMonthlyCents: z.number().int().nonnegative().optional().default(0), permissions: agentPermissionsSchema.optional(), metadata: z.record(z.unknown()).optional().nullable(), }); export type CreateAgent = z.infer; export const createAgentHireSchema = createAgentSchema.extend({ sourceIssueId: z.string().uuid().optional().nullable(), sourceIssueIds: z.array(z.string().uuid()).optional(), }); export type CreateAgentHire = z.infer; export const updateAgentSchema = createAgentSchema .omit({ permissions: true }) .partial() .extend({ permissions: z.never().optional(), status: z.enum(AGENT_STATUSES).optional(), spentMonthlyCents: z.number().int().nonnegative().optional(), }); export type UpdateAgent = z.infer; export const createAgentKeySchema = z.object({ name: z.string().min(1).default("default"), }); export type CreateAgentKey = z.infer; export const wakeAgentSchema = z.object({ source: z.enum(["timer", "assignment", "on_demand", "automation"]).optional().default("on_demand"), triggerDetail: z.enum(["manual", "ping", "callback", "system"]).optional(), reason: z.string().optional().nullable(), payload: z.record(z.unknown()).optional().nullable(), idempotencyKey: z.string().optional().nullable(), }); export type WakeAgent = z.infer; export const resetAgentSessionSchema = z.object({ taskKey: z.string().min(1).optional().nullable(), }); export type ResetAgentSession = z.infer; export const updateAgentPermissionsSchema = z.object({ canCreateAgents: z.boolean(), }); export type UpdateAgentPermissions = z.infer;