mirror of
https://github.com/openai/codex.git
synced 2026-05-23 20:44:50 +00:00
## Why After `hooks/list` exposes the hook inventory, clients need a way to persist user hook preferences, make those changes effective in already-open sessions, and distinguish user-controllable hooks from managed requirements without adding another bespoke app-server write API. ## What - Extends `hooks/list` entries with effective `enabled` state. - Persists user-level hook state under `hooks.state.<hook-id>` so the model can grow beyond a single boolean over time. - Uses the existing `config/batchWrite` path for hook state updates instead of introducing a dedicated hook write RPC. - Refreshes live session hook engines after config writes so already-open threads observe updated enablement without a restart. ## Stack 1. openai/codex#19705 2. openai/codex#19778 3. This PR - openai/codex#19840 4. openai/codex#19882 ## Reviewer Notes The generated schema files account for much of the raw diff. The core behavior is in: - `hooks/src/config_rules.rs`, which resolves per-hook user state from the config layer stack. - `hooks/src/engine/discovery.rs`, which projects effective enablement into `hooks/list` from source-derived managedness. - `config/src/hook_config.rs`, which defines the new `hooks.state` representation. - `core/src/session/mod.rs`, which rebuilds live hook state after user config reloads. --------- Co-authored-by: Codex <noreply@openai.com>
63 lines
2.0 KiB
Rust
63 lines
2.0 KiB
Rust
mod config_rules;
|
|
mod engine;
|
|
pub(crate) mod events;
|
|
mod legacy_notify;
|
|
mod registry;
|
|
mod schema;
|
|
mod types;
|
|
|
|
pub use engine::HookListEntry;
|
|
/// Hook event names as they appear in hooks JSON and config files.
|
|
pub const HOOK_EVENT_NAMES: [&str; 6] = [
|
|
"PreToolUse",
|
|
"PermissionRequest",
|
|
"PostToolUse",
|
|
"SessionStart",
|
|
"UserPromptSubmit",
|
|
"Stop",
|
|
];
|
|
|
|
/// Hook event names whose matcher fields are meaningful during dispatch.
|
|
///
|
|
/// Other events can appear in hooks JSON, but Codex ignores their matcher
|
|
/// fields because those events do not dispatch against a tool or session-start
|
|
/// source.
|
|
pub const HOOK_EVENT_NAMES_WITH_MATCHERS: [&str; 4] = [
|
|
"PreToolUse",
|
|
"PermissionRequest",
|
|
"PostToolUse",
|
|
"SessionStart",
|
|
];
|
|
pub use events::permission_request::PermissionRequestDecision;
|
|
pub use events::permission_request::PermissionRequestOutcome;
|
|
pub use events::permission_request::PermissionRequestRequest;
|
|
pub use events::post_tool_use::PostToolUseOutcome;
|
|
pub use events::post_tool_use::PostToolUseRequest;
|
|
pub use events::pre_tool_use::PreToolUseOutcome;
|
|
pub use events::pre_tool_use::PreToolUseRequest;
|
|
pub use events::session_start::SessionStartOutcome;
|
|
pub use events::session_start::SessionStartRequest;
|
|
pub use events::session_start::SessionStartSource;
|
|
pub use events::stop::StopOutcome;
|
|
pub use events::stop::StopRequest;
|
|
pub use events::user_prompt_submit::UserPromptSubmitOutcome;
|
|
pub use events::user_prompt_submit::UserPromptSubmitRequest;
|
|
pub use legacy_notify::legacy_notify_json;
|
|
pub use legacy_notify::notify_hook;
|
|
pub use registry::HookListOutcome;
|
|
pub use registry::Hooks;
|
|
pub use registry::HooksConfig;
|
|
pub use registry::command_from_argv;
|
|
pub use registry::list_hooks;
|
|
pub use schema::write_schema_fixtures;
|
|
pub use types::Hook;
|
|
pub use types::HookEvent;
|
|
pub use types::HookEventAfterAgent;
|
|
pub use types::HookEventAfterToolUse;
|
|
pub use types::HookPayload;
|
|
pub use types::HookResponse;
|
|
pub use types::HookResult;
|
|
pub use types::HookToolInput;
|
|
pub use types::HookToolInputLocalShell;
|
|
pub use types::HookToolKind;
|