Files
oh-my-opencode/src/plugin/hooks/create-transform-hooks.ts
T

66 lines
2.0 KiB
TypeScript
Raw Normal View History

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<typeof createClaudeCodeHooksHook>
keywordDetector: ReturnType<typeof createKeywordDetectorHook> | null
contextInjectorMessagesTransform: ReturnType<typeof createContextInjectorMessagesTransformHook>
thinkingBlockValidator: ReturnType<typeof createThinkingBlockValidatorHook> | 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,
}
}