/** * config/types.ts — Types for the unified DevClaw configuration. * * A single workflow.yaml combines roles, models, and workflow. * Three-layer resolution: built-in → workspace → per-project. */ import type { WorkflowConfig } from "../workflow.js"; /** * Role override in workflow.yaml. All fields optional — only override what you need. * Set to `false` to disable a role entirely for a project. */ export type RoleOverride = { levels?: string[]; defaultLevel?: string; models?: Record; emoji?: Record; completionResults?: string[]; }; /** * Configurable timeout values (in milliseconds). * All fields optional — defaults applied at resolution time. */ export type TimeoutConfig = { gitPullMs?: number; gatewayMs?: number; sessionPatchMs?: number; dispatchMs?: number; staleWorkerHours?: number; }; /** * The full workflow.yaml shape. * All fields optional — missing fields inherit from the layer below. */ export type DevClawConfig = { roles?: Record; workflow?: Partial; timeouts?: TimeoutConfig; }; /** * Fully resolved timeout config — all fields present with defaults. */ export type ResolvedTimeouts = { gitPullMs: number; gatewayMs: number; sessionPatchMs: number; dispatchMs: number; staleWorkerHours: number; }; /** * Fully resolved config — all fields guaranteed present. * Built by merging three layers over the built-in defaults. */ export type ResolvedConfig = { roles: Record; workflow: WorkflowConfig; timeouts: ResolvedTimeouts; }; /** * Fully resolved role config — all fields present. */ export type ResolvedRoleConfig = { levels: string[]; defaultLevel: string; models: Record; emoji: Record; completionResults: string[]; enabled: boolean; };