mirror of
https://github.com/openai/codex.git
synced 2026-10-24 18:18:41 +00:00
Include environment hooks in thread hook listings (#56553)
## Why Listing hooks by working directory alone omits hooks supplied by a thread's selected execution environments, including hooks that can block a turn. ## What changed - Add `threadId` to `hooks/list` to return a loaded thread's current hook inventory, including selected, ready environments. Reject requests that also specify `cwds`. - Expose `environmentId` in hook metadata and have the TUI hooks browser query the current thread and label environment-owned hooks. Keep working-directory lookup for startup review. - Represent environment hook source paths with `PathUri` and use `LegacyAppPathString` in hook run summaries to preserve native path conventions. ## Testing Add coverage for listing a blocking environment hook and removing it after environment failure, delivering prompt input and reporting exit status in PowerShell and Bash, and running `PreToolUse` hooks only on the command's owning executor. Extend remote network tests to verify that environment hooks use the command's network policy while retaining their filesystem access. GitOrigin-RevId: 97229e22793df51f4bd502c1f9e19f0c52fb2305
This commit is contained in:
@@ -2022,7 +2022,16 @@ class HooksListParams(BaseModel):
|
||||
)
|
||||
cwds: Annotated[
|
||||
list[str] | None,
|
||||
Field(description="When empty, defaults to the current session working directory."),
|
||||
Field(
|
||||
description="Working directories to inspect when no thread is specified. An empty list uses the session cwd."
|
||||
),
|
||||
] = None
|
||||
thread_id: Annotated[
|
||||
str | None,
|
||||
Field(
|
||||
alias="threadId",
|
||||
description="List a loaded thread's hooks, including its selected environments. Omit `cwds` in this mode.",
|
||||
),
|
||||
] = None
|
||||
|
||||
|
||||
@@ -8418,6 +8427,13 @@ class HookMetadata1(BaseModel):
|
||||
current_hash: Annotated[str, Field(alias="currentHash")]
|
||||
display_order: Annotated[int, Field(alias="displayOrder")]
|
||||
enabled: bool
|
||||
environment_id: Annotated[
|
||||
str | None,
|
||||
Field(
|
||||
alias="environmentId",
|
||||
description="The owning execution environment, if this hook came from its requirements.",
|
||||
),
|
||||
] = None
|
||||
event_name: Annotated[HookEventName, Field(alias="eventName")]
|
||||
is_managed: Annotated[bool, Field(alias="isManaged")]
|
||||
key: str
|
||||
@@ -8448,6 +8464,13 @@ class HookMetadata2(BaseModel):
|
||||
current_hash: Annotated[str, Field(alias="currentHash")]
|
||||
display_order: Annotated[int, Field(alias="displayOrder")]
|
||||
enabled: bool
|
||||
environment_id: Annotated[
|
||||
str | None,
|
||||
Field(
|
||||
alias="environmentId",
|
||||
description="The owning execution environment, if this hook came from its requirements.",
|
||||
),
|
||||
] = None
|
||||
event_name: Annotated[HookEventName, Field(alias="eventName")]
|
||||
is_managed: Annotated[bool, Field(alias="isManaged")]
|
||||
key: str
|
||||
@@ -8478,6 +8501,13 @@ class PromptHookMetadata(BaseModel):
|
||||
current_hash: Annotated[str, Field(alias="currentHash")]
|
||||
display_order: Annotated[int, Field(alias="displayOrder")]
|
||||
enabled: bool
|
||||
environment_id: Annotated[
|
||||
str | None,
|
||||
Field(
|
||||
alias="environmentId",
|
||||
description="The owning execution environment, if this hook came from its requirements.",
|
||||
),
|
||||
] = None
|
||||
event_name: Annotated[HookEventName, Field(alias="eventName")]
|
||||
is_managed: Annotated[bool, Field(alias="isManaged")]
|
||||
key: str
|
||||
@@ -8506,6 +8536,13 @@ class AgentHookMetadata(BaseModel):
|
||||
current_hash: Annotated[str, Field(alias="currentHash")]
|
||||
display_order: Annotated[int, Field(alias="displayOrder")]
|
||||
enabled: bool
|
||||
environment_id: Annotated[
|
||||
str | None,
|
||||
Field(
|
||||
alias="environmentId",
|
||||
description="The owning execution environment, if this hook came from its requirements.",
|
||||
),
|
||||
] = None
|
||||
event_name: Annotated[HookEventName, Field(alias="eventName")]
|
||||
is_managed: Annotated[bool, Field(alias="isManaged")]
|
||||
key: str
|
||||
@@ -8547,7 +8584,7 @@ class HookRunSummary(BaseModel):
|
||||
id: str
|
||||
scope: HookScope
|
||||
source: HookSource | None = "unknown"
|
||||
source_path: Annotated[AbsolutePathBuf, Field(alias="sourcePath")]
|
||||
source_path: Annotated[LegacyAppPathString, Field(alias="sourcePath")]
|
||||
started_at: Annotated[int, Field(alias="startedAt")]
|
||||
status: HookRunStatus
|
||||
status_message: Annotated[str | None, Field(alias="statusMessage")] = None
|
||||
|
||||
Reference in New Issue
Block a user