import type { OhMyOpenCodeConfig } from "../../config" import type { PluginContext } from "../types" import { createClaudeCodeHooksHook, createKeywordDetectorHook, createThinkingBlockValidatorHook, } from "../../hooks" import { contextCollector, createContextInjectorMessagesTransformHook, } from "../../features/context-injector" import { safeCreateHook } from "../../shared/safe-create-hook" export type TransformHooks = { claudeCodeHooks: ReturnType keywordDetector: ReturnType | null contextInjectorMessagesTransform: ReturnType thinkingBlockValidator: ReturnType | null } export function createTransformHooks(args: { ctx: PluginContext pluginConfig: OhMyOpenCodeConfig isHookEnabled: (hookName: string) => boolean safeHookEnabled?: boolean }): TransformHooks { const { ctx, pluginConfig, isHookEnabled } = args const safeHookEnabled = args.safeHookEnabled ?? true const claudeCodeHooks = createClaudeCodeHooksHook( ctx, { disabledHooks: (pluginConfig.claude_code?.hooks ?? true) ? undefined : true, keywordDetectorDisabled: !isHookEnabled("keyword-detector"), }, contextCollector, ) const keywordDetector = isHookEnabled("keyword-detector") ? safeCreateHook( "keyword-detector", () => createKeywordDetectorHook(ctx, contextCollector), { enabled: safeHookEnabled }, ) : null const contextInjectorMessagesTransform = createContextInjectorMessagesTransformHook(contextCollector) const thinkingBlockValidator = isHookEnabled("thinking-block-validator") ? safeCreateHook( "thinking-block-validator", () => createThinkingBlockValidatorHook(), { enabled: safeHookEnabled }, ) : null return { claudeCodeHooks, keywordDetector, contextInjectorMessagesTransform, thinkingBlockValidator, } }