langchain-ai/deepagents · error · TypeError
Unsupported hook event: {type(event).__name__}
Error message
Unsupported hook event: {type(event).__name__} What it means
`_project_event` is a singledispatch projector in `libs/code/deepagents_code/hooks/projection.py` that converts internal `HookDomainEvent` objects into wire-format inputs for external hook processes. If no registered handler matches the event's concrete type, the fallback raises `TypeError`, indicating an internal invariant was violated: an event type reached hook projection that the library does not know how to serialize.
Source
Thrown at libs/code/deepagents_code/hooks/projection.py:110
payload = HOOK_WIRE_INPUT_ADAPTER.dump_python(
result,
mode="json",
by_alias=True,
exclude_none=True,
)
return HOOK_WIRE_INPUT_ADAPTER.validate_python(payload)
@singledispatch
def _project_event(
event: HookDomainEvent,
_invocation: HookInvocation,
_transcript_path: Path,
_agent_transcript_path: Path | None,
) -> HookWireInput:
msg = f"Unsupported hook event: {type(event).__name__}"
raise TypeError(msg)
@_project_event.register(SessionStartEvent)
def _project_session_start(
event: SessionStartEvent,
invocation: HookInvocation,
transcript_path: Path,
_agent_transcript_path: Path | None,
) -> HookWireInput:
return SessionStartWireInput(
**_base_fields(invocation, transcript_path),
hook_event_name=HookEvent.SESSION_START,
source=event.cause,
model=event.model,
)
@_project_event.register(UserPromptSubmitEvent)View on GitHub (pinned to a1af029e6e)
Solutions
- Use one of the supported event types (e.g. `SessionStartEvent`, `SubagentStopEvent`) instead of a custom class
- Register a projector with `@_project_event.register(MyEvent)` returning a `HookWireInput`
- Align library versions so the event type and its projector come from the same release
Example fix
// before project_hook_input(MyCustomEvent(), invocation, transcript, agent_transcript) // after @_project_event.register def _project_custom(event: MyCustomEvent, ...) -> HookWireInput: ...
Defensive patterns
Strategy: type-guard
Validate before calling
if not isinstance(event, SUPPORTED_HOOK_EVENTS):
raise TypeError(f"cannot project event: {type(event).__name__}") Type guard
from typing import TypeGuard
from deepagents_code.hooks.events import HookDomainEvent
SUPPORTED = (SessionStartEvent, SubagentStopEvent, SubagentStartEvent) # as applicable
def is_projectable(e: HookDomainEvent) -> TypeGuard[SessionStartEvent | SubagentStopEvent]:
return isinstance(e, SUPPORTED) Try / catch
try:
wire = project_hook_input(event, invocation, transcript, agent_transcript)
except TypeError as e:
logger.warning("skipping unprojectable hook event: %s", e) Prevention
- Only pass domain events produced by the library itself into projection
- When subclassing HookDomainEvent, also register a projector
- Keep hook-related packages on the same version
When it happens
Trigger: Calling `project_hook_input` with a `HookDomainEvent` subclass that has no `@_project_event.register` handler — typically a custom/unknown event class or an event added in a newer library version than the projector table.
Common situations: Passing hand-constructed or mocked domain events into the hook pipeline in tests; running hook code against a mismatched deepagents version where a new event type exists but projection support doesn't; subclassing `HookDomainEvent` to inject custom events.
Related errors
- Unsupported hook-specific output: {type(specific).__name__}
- Expected UserPromptSubmitDecision, got {type(decision).__nam
- Expected PreCompactDecision, got {type(decision).__name__}
- Expected PermissionRequestDecision, got {type(decision).__na
- Unsupported hook event: {event}
AI-assisted analysis of langchain-ai/deepagents@a1af029e6e (2026-08-29).
Data as JSON: /api/errors/a4abdb9005fffc2f.
Report an issue: GitHub.