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
JavaScript
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()
})
});