Files
oh-my-openagent/src/plugin/AGENTS.md

2.5 KiB

src/plugin/ — 8 OpenCode Hook Handlers + Hook Composition

Generated: 2026-02-21

OVERVIEW

Core glue layer. 20 source files assembling the 8 OpenCode hook handlers and composing 44 hooks into the PluginInterface. Every handler file corresponds to one OpenCode hook type.

HANDLER FILES

File OpenCode Hook Purpose
chat-message.ts chat.message First-message variant, session setup, keyword detection
chat-params.ts chat.params Anthropic effort level, think mode
event.ts event Session lifecycle (created, deleted, idle, error)
tool-execute-before.ts tool.execute.before Pre-tool guards (file guard, label truncator, rules injector)
tool-execute-after.ts tool.execute.after Post-tool hooks (output truncation, comment checker, metadata)
messages-transform.ts experimental.chat.messages.transform Context injection, thinking block validation
tool-registry.ts tool 26 tools assembled from factories
skill-context.ts Skill/browser/category context for tool creation

HOOK COMPOSITION (hooks/ subdir)

File Tier Count
create-session-hooks.ts Session 21
create-tool-guard-hooks.ts Tool Guard 10
create-transform-hooks.ts Transform 4
create-continuation-hooks.ts Continuation 7
create-skill-hooks.ts Skill 2
create-core-hooks.ts Aggregator Session + Guard + Transform = 35

SUPPORT FILES

File Purpose
available-categories.ts Build AvailableCategory[] for agent prompt injection
session-agent-resolver.ts Resolve which agent owns a session
session-status-normalizer.ts Normalize session status across OpenCode versions
recent-synthetic-idles.ts Dedup rapid idle events
unstable-agent-babysitter.ts Track unstable agent behavior across sessions
types.ts PluginContext, PluginInterface, ToolsRecord, TmuxConfig
ultrawork-model-override.ts Ultrawork mode model override logic
ultrawork-db-model-override.ts DB-level model override for ultrawork

KEY PATTERNS

  • Each handler exports a function receiving (hookRecord, ctx, pluginConfig, managers) → returns OpenCode hook function
  • Handlers iterate over hook records, calling each hook with (input, output) in sequence
  • safeHook() wrapper in composition files catches errors per-hook without breaking the chain
  • Tool registry uses filterDisabledTools() before returning