UNPKG

termcode

Version:

Superior terminal AI coding agent with enterprise-grade security, intelligent error recovery, performance monitoring, and plugin system - Advanced Claude Code alternative

54 lines (53 loc) 2.16 kB
import { z } from "zod"; // Zod schemas for validation export const HookSchema = z.object({ id: z.string(), name: z.string(), description: z.string(), type: z.enum(['PreToolUse', 'PostToolUse', 'PreDiff', 'PostDiff', 'PreCommit', 'PostCommit', 'PreTask', 'PostTask', 'OnError', 'OnSuccess']), matcher: z.object({ toolNames: z.array(z.string()).optional(), patterns: z.array(z.any()).optional(), conditions: z.array(z.object({ path: z.string(), operator: z.enum(['equals', 'contains', 'matches', 'gt', 'lt']), value: z.any() })).optional(), fileTypes: z.array(z.string()).optional(), providers: z.array(z.string()).optional(), models: z.array(z.string()).optional() }), handler: z.object({ type: z.enum(['javascript', 'python', 'shell', 'builtin']), script: z.string().optional(), file: z.string().optional(), function: z.string().optional(), builtin: z.enum(['command_validator', 'security_scanner', 'diff_optimizer', 'commit_enhancer', 'error_analyzer', 'performance_monitor']).optional() }), priority: z.number().default(100), enabled: z.boolean().default(true), timeout: z.number().default(30000), retries: z.number().default(0), conditions: z.array(z.object({ type: z.enum(['file_exists', 'command_available', 'env_var', 'git_status', 'custom']), condition: z.string(), negate: z.boolean().optional() })).optional(), metadata: z.record(z.any()).optional() }); export const HookConfigSchema = z.object({ enabled: z.boolean().default(true), hooks: z.array(HookSchema), globalTimeout: z.number().default(300000), maxConcurrency: z.number().default(5), retryPolicy: z.object({ maxRetries: z.number().default(3), backoffMultiplier: z.number().default(2), maxBackoffTime: z.number().default(30000) }), logging: z.object({ enabled: z.boolean().default(true), level: z.enum(['debug', 'info', 'warn', 'error']).default('info'), logFile: z.string().optional() }) });