import { z } from "zod";
import { AGENT_ADAPTER_TYPES, AGENT_ICON_NAMES, AGENT_ROLES, AGENT_STATUSES, } from "../constants.js";
import { envConfigSchema } from "./secret.js";
export const agentPermissionsSchema = z.object({
    canCreateAgents: z.boolean().optional().default(false),
});
export const agentInstructionsBundleModeSchema = z.enum(["managed", "external"]);
export const updateAgentInstructionsBundleSchema = z.object({
    mode: agentInstructionsBundleModeSchema.optional(),
    rootPath: z.string().trim().min(1).nullable().optional(),
    entryFile: z.string().trim().min(1).optional(),
    clearLegacyPromptTemplate: z.boolean().optional().default(false),
});
export const upsertAgentInstructionsFileSchema = z.object({
    path: z.string().trim().min(1),
    content: z.string(),
    clearLegacyPromptTemplate: z.boolean().optional().default(false),
});
const adapterConfigSchema = z.record(z.unknown()).superRefine((value, ctx) => {
    const envValue = value.env;
    if (envValue === undefined)
        return;
    const parsed = envConfigSchema.safeParse(envValue);
    if (!parsed.success) {
        ctx.addIssue({
            code: z.ZodIssueCode.custom,
            message: "adapterConfig.env must be a map of valid env bindings",
            path: ["env"],
        });
    }
});
export const createAgentSchema = z.object({
    name: z.string().min(1),
    role: z.enum(AGENT_ROLES).optional().default("general"),
    title: z.string().optional().nullable(),
    icon: z.enum(AGENT_ICON_NAMES).optional().nullable(),
    reportsTo: z.string().uuid().optional().nullable(),
    capabilities: z.string().optional().nullable(),
    desiredSkills: z.array(z.string().min(1)).optional(),
    adapterType: z.enum(AGENT_ADAPTER_TYPES).optional().default("process"),
    adapterConfig: adapterConfigSchema.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 const createAgentHireSchema = createAgentSchema.extend({
    sourceIssueId: z.string().uuid().optional().nullable(),
    sourceIssueIds: z.array(z.string().uuid()).optional(),
});
export const updateAgentSchema = createAgentSchema
    .omit({ permissions: true })
    .partial()
    .extend({
    permissions: z.never().optional(),
    replaceAdapterConfig: z.boolean().optional(),
    status: z.enum(AGENT_STATUSES).optional(),
    spentMonthlyCents: z.number().int().nonnegative().optional(),
});
export const updateAgentInstructionsPathSchema = z.object({
    path: z.string().trim().min(1).nullable(),
    adapterConfigKey: z.string().trim().min(1).optional(),
});
export const createAgentKeySchema = z.object({
    name: z.string().min(1).default("default"),
});
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(),
    forceFreshSession: z.preprocess((value) => (value === null ? undefined : value), z.boolean().optional().default(false)),
});
export const resetAgentSessionSchema = z.object({
    taskKey: z.string().min(1).optional().nullable(),
});
export const testAdapterEnvironmentSchema = z.object({
    adapterConfig: adapterConfigSchema.optional().default({}),
});
export const updateAgentPermissionsSchema = z.object({
    canCreateAgents: z.boolean(),
    canAssignTasks: z.boolean(),
});
//# sourceMappingURL=agent.js.map