15.2 插件入口与初始化
15.2.1 src/index.ts —— Plugin 入口
src/index.ts —— Plugin 入口// oh-my-opencode/src/index.ts
import type { Plugin } from "@opencode-ai/plugin"
const OhMyOpenCodePlugin: Plugin = async (ctx) => {
log("[OhMyOpenCodePlugin] ENTRY - plugin loading", {
directory: ctx.directory,
})
// 步骤 0:基础环境准备
injectServerAuthIntoClient(ctx.client)
startTmuxCheck()
// 步骤 1:加载配置
const pluginConfig = loadPluginConfig(ctx.directory, ctx)
const disabledHooks = new Set(pluginConfig.disabled_hooks ?? [])
const isHookEnabled = (hookName: HookName): boolean => !disabledHooks.has(hookName)
const safeHookEnabled = pluginConfig.experimental?.safe_hook_creation ?? true
// 步骤 2:创建辅助状态
const firstMessageVariantGate = createFirstMessageVariantGate()
const tmuxConfig = {
enabled: pluginConfig.tmux?.enabled ?? false,
layout: pluginConfig.tmux?.layout ?? "main-vertical",
main_pane_size: pluginConfig.tmux?.main_pane_size ?? 60,
// ...
}
const modelCacheState = createModelCacheState()
// 步骤 3:创建 Manager
const managers = createManagers({
ctx, pluginConfig, tmuxConfig, modelCacheState,
backgroundNotificationHookEnabled: isHookEnabled("background-notification"),
})
// 步骤 4:创建工具(异步)
const toolsResult = await createTools({ ctx, pluginConfig, managers })
// 步骤 5:创建 Hook
const hooks = createHooks({
ctx, pluginConfig, modelCacheState,
backgroundManager: managers.backgroundManager,
isHookEnabled, safeHookEnabled,
mergedSkills: toolsResult.mergedSkills,
availableSkills: toolsResult.availableSkills,
})
// 步骤 6:组装 Plugin 接口
const pluginInterface = createPluginInterface({
ctx, pluginConfig, firstMessageVariantGate,
managers, hooks, tools: toolsResult.filteredTools,
})
// 步骤 7:返回最终接口(附加 compaction 处理)
return {
...pluginInterface,
"experimental.session.compacting": async (_input, output) => {
await hooks.compactionTodoPreserver?.capture(_input.sessionID)
await hooks.claudeCodeHooks?.["experimental.session.compacting"]?.(_input, output)
if (hooks.compactionContextInjector) {
output.context.push(hooks.compactionContextInjector(_input.sessionID))
}
},
}
}
export default OhMyOpenCodePlugin三大初始化步骤
接口组装
15.2.2 配置加载(plugin-config.ts)
plugin-config.ts)配置文件发现
JSONC 支持
部分配置容错解析
配置合并策略
配置迁移
15.2.3 OhMyOpenCodeConfig 配置 Schema
OhMyOpenCodeConfig 配置 SchemaAgent 覆盖配置
后台任务配置
内置 Agent 与 Skill 的枚举类型
Hook 名称枚举
插件级全局状态
本节小结
Last updated
