UNPKG

claudekit

Version:

CLI tools for Claude Code development workflow

66 lines (56 loc) 1.85 kB
import type { HookContext, HookResult } from './base.js'; import { BaseHook } from './base.js'; import { getHookConfig } from '../utils/claudekit-config.js'; interface ThinkingLevelConfig { level?: number; // 0-3 } export class ThinkingLevelHook extends BaseHook { name = 'thinking-level'; static metadata = { id: 'thinking-level', displayName: 'Thinking Level', description: 'Injects thinking level keywords based on configuration', category: 'utility' as const, triggerEvent: 'UserPromptSubmit' as const, matcher: '*', dependencies: [], }; private readonly levelKeywords: Record<number, string> = { 0: '', 1: 'think', 2: 'megathink', 3: 'ultrathink', }; private loadConfig(): ThinkingLevelConfig { return getHookConfig<ThinkingLevelConfig>('thinking-level') ?? {}; } private getKeywordForLevel(level: number): string { // Ensure level is within valid range (0-3) if (level < 0 || level > 3 || !Number.isInteger(level)) { const fallbackKeyword = this.levelKeywords[0]; return fallbackKeyword !== undefined ? fallbackKeyword : ''; } const keyword = this.levelKeywords[level]; return keyword !== undefined ? keyword : ''; } async execute(_context: HookContext): Promise<HookResult> { const config = this.loadConfig(); // Get the configured level (default to 2) const level = config.level ?? 2; const keyword = this.getKeywordForLevel(level); // If level 0 or empty keyword, don't inject anything if (level === 0 || keyword === '') { return { exitCode: 0 }; } // Return JSON response with additionalContext return { exitCode: 0, jsonResponse: { hookSpecificOutput: { hookEventName: 'UserPromptSubmit', additionalContext: keyword, }, }, }; } }