2026-02-08 16:25:25 +09:00
|
|
|
import type { AvailableSkill } from "./agents/dynamic-agent-prompt-builder"
|
|
|
|
|
import type { HookName, OhMyOpenCodeConfig } from "./config"
|
|
|
|
|
import type { LoadedSkill } from "./features/opencode-skill-loader/types"
|
|
|
|
|
import type { BackgroundManager } from "./features/background-agent"
|
2026-04-18 02:35:46 +09:00
|
|
|
import type { ModelFallbackControllerAccessor } from "./hooks/model-fallback"
|
2026-02-08 16:25:25 +09:00
|
|
|
import type { PluginContext } from "./plugin/types"
|
2026-02-17 10:33:17 +09:00
|
|
|
import type { ModelCacheState } from "./plugin-state"
|
2026-02-08 16:25:25 +09:00
|
|
|
|
|
|
|
|
import { createCoreHooks } from "./plugin/hooks/create-core-hooks"
|
|
|
|
|
import { createContinuationHooks } from "./plugin/hooks/create-continuation-hooks"
|
|
|
|
|
import { createSkillHooks } from "./plugin/hooks/create-skill-hooks"
|
|
|
|
|
|
|
|
|
|
export type CreatedHooks = ReturnType<typeof createHooks>
|
|
|
|
|
|
2026-03-11 20:12:56 +09:00
|
|
|
type DisposableHook = { dispose?: () => void } | null | undefined
|
|
|
|
|
|
|
|
|
|
export type DisposableCreatedHooks = {
|
2026-03-31 17:33:19 -07:00
|
|
|
claudeCodeHooks?: DisposableHook
|
|
|
|
|
commentChecker?: DisposableHook
|
2026-03-11 20:12:56 +09:00
|
|
|
runtimeFallback?: DisposableHook
|
|
|
|
|
todoContinuationEnforcer?: DisposableHook
|
|
|
|
|
autoSlashCommand?: DisposableHook
|
2026-04-04 15:39:12 +09:00
|
|
|
anthropicContextWindowLimitRecovery?: DisposableHook
|
2026-03-11 20:12:56 +09:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function disposeCreatedHooks(hooks: DisposableCreatedHooks): void {
|
2026-04-04 15:39:12 +09:00
|
|
|
hooks.claudeCodeHooks?.dispose?.()
|
|
|
|
|
hooks.commentChecker?.dispose?.()
|
2026-03-11 20:12:56 +09:00
|
|
|
hooks.runtimeFallback?.dispose?.()
|
|
|
|
|
hooks.todoContinuationEnforcer?.dispose?.()
|
|
|
|
|
hooks.autoSlashCommand?.dispose?.()
|
2026-04-04 15:39:12 +09:00
|
|
|
hooks.anthropicContextWindowLimitRecovery?.dispose?.()
|
2026-03-11 20:12:56 +09:00
|
|
|
}
|
|
|
|
|
|
2026-02-08 16:25:25 +09:00
|
|
|
export function createHooks(args: {
|
|
|
|
|
ctx: PluginContext
|
|
|
|
|
pluginConfig: OhMyOpenCodeConfig
|
2026-02-17 10:33:17 +09:00
|
|
|
modelCacheState: ModelCacheState
|
2026-02-08 16:25:25 +09:00
|
|
|
backgroundManager: BackgroundManager
|
2026-04-18 02:35:46 +09:00
|
|
|
modelFallbackControllerAccessor?: ModelFallbackControllerAccessor
|
2026-02-08 16:25:25 +09:00
|
|
|
isHookEnabled: (hookName: HookName) => boolean
|
|
|
|
|
safeHookEnabled: boolean
|
|
|
|
|
mergedSkills: LoadedSkill[]
|
|
|
|
|
availableSkills: AvailableSkill[]
|
|
|
|
|
}) {
|
|
|
|
|
const {
|
|
|
|
|
ctx,
|
|
|
|
|
pluginConfig,
|
2026-02-17 10:33:17 +09:00
|
|
|
modelCacheState,
|
2026-02-08 16:25:25 +09:00
|
|
|
backgroundManager,
|
2026-04-18 02:35:46 +09:00
|
|
|
modelFallbackControllerAccessor,
|
2026-02-08 16:25:25 +09:00
|
|
|
isHookEnabled,
|
|
|
|
|
safeHookEnabled,
|
|
|
|
|
mergedSkills,
|
|
|
|
|
availableSkills,
|
|
|
|
|
} = args
|
|
|
|
|
|
|
|
|
|
const core = createCoreHooks({
|
|
|
|
|
ctx,
|
|
|
|
|
pluginConfig,
|
2026-02-17 10:33:17 +09:00
|
|
|
modelCacheState,
|
2026-04-27 17:52:45 +09:00
|
|
|
backgroundManager,
|
2026-04-18 02:35:46 +09:00
|
|
|
modelFallbackControllerAccessor,
|
2026-02-08 16:25:25 +09:00
|
|
|
isHookEnabled,
|
|
|
|
|
safeHookEnabled,
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
const continuation = createContinuationHooks({
|
|
|
|
|
ctx,
|
|
|
|
|
pluginConfig,
|
|
|
|
|
isHookEnabled,
|
|
|
|
|
safeHookEnabled,
|
|
|
|
|
backgroundManager,
|
|
|
|
|
sessionRecovery: core.sessionRecovery,
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
const skill = createSkillHooks({
|
|
|
|
|
ctx,
|
2026-02-21 10:05:50 -05:00
|
|
|
pluginConfig,
|
2026-02-08 16:25:25 +09:00
|
|
|
isHookEnabled,
|
|
|
|
|
safeHookEnabled,
|
|
|
|
|
mergedSkills,
|
|
|
|
|
availableSkills,
|
|
|
|
|
})
|
|
|
|
|
|
2026-03-11 20:12:56 +09:00
|
|
|
const hooks = {
|
2026-02-08 16:25:25 +09:00
|
|
|
...core,
|
|
|
|
|
...continuation,
|
|
|
|
|
...skill,
|
|
|
|
|
}
|
2026-03-11 20:12:56 +09:00
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
...hooks,
|
|
|
|
|
disposeHooks: (): void => {
|
|
|
|
|
disposeCreatedHooks(hooks)
|
|
|
|
|
},
|
|
|
|
|
}
|
2026-02-08 16:25:25 +09:00
|
|
|
}
|