{"record":{"id":"a4abdb9005fffc2f","repo":"langchain-ai/deepagents","slug":"unsupported-hook-event-type-event-name","errorCode":null,"errorMessage":"Unsupported hook event: {type(event).__name__}","messagePattern":"Unsupported hook event: (.+?)","errorType":"exception","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"libs/code/deepagents_code/hooks/projection.py","lineNumber":110,"sourceCode":"\n    payload = HOOK_WIRE_INPUT_ADAPTER.dump_python(\n        result,\n        mode=\"json\",\n        by_alias=True,\n        exclude_none=True,\n    )\n    return HOOK_WIRE_INPUT_ADAPTER.validate_python(payload)\n\n\n@singledispatch\ndef _project_event(\n    event: HookDomainEvent,\n    _invocation: HookInvocation,\n    _transcript_path: Path,\n    _agent_transcript_path: Path | None,\n) -> HookWireInput:\n    msg = f\"Unsupported hook event: {type(event).__name__}\"\n    raise TypeError(msg)\n\n\n@_project_event.register(SessionStartEvent)\ndef _project_session_start(\n    event: SessionStartEvent,\n    invocation: HookInvocation,\n    transcript_path: Path,\n    _agent_transcript_path: Path | None,\n) -> HookWireInput:\n    return SessionStartWireInput(\n        **_base_fields(invocation, transcript_path),\n        hook_event_name=HookEvent.SESSION_START,\n        source=event.cause,\n        model=event.model,\n    )\n\n\n@_project_event.register(UserPromptSubmitEvent)","sourceCodeStart":92,"sourceCodeEnd":128,"githubUrl":"https://github.com/langchain-ai/deepagents/blob/a1af029e6e73cb17c36bff823d227747b28e91e1/libs/code/deepagents_code/hooks/projection.py#L92-L128","documentation":"`_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.","triggerScenarios":"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.","commonSituations":"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.","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"],"exampleFix":"// before\nproject_hook_input(MyCustomEvent(), invocation, transcript, agent_transcript)\n// after\n@_project_event.register\n def _project_custom(event: MyCustomEvent, ...) -> HookWireInput: ...","handlingStrategy":"type-guard","validationCode":"if not isinstance(event, SUPPORTED_HOOK_EVENTS):\n    raise TypeError(f\"cannot project event: {type(event).__name__}\")","typeGuard":"from typing import TypeGuard\nfrom deepagents_code.hooks.events import HookDomainEvent\nSUPPORTED = (SessionStartEvent, SubagentStopEvent, SubagentStartEvent)  # as applicable\n\ndef is_projectable(e: HookDomainEvent) -> TypeGuard[SessionStartEvent | SubagentStopEvent]:\n    return isinstance(e, SUPPORTED)","tryCatchPattern":"try:\n    wire = project_hook_input(event, invocation, transcript, agent_transcript)\nexcept TypeError as e:\n    logger.warning(\"skipping unprojectable hook event: %s\", e)","preventionTips":["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"],"tags":["typeerror","hooks","internal-invariant","projection"],"backgroundTag":"unsupported-event-type","analyzedSha":"a1af029e6e73cb17c36bff823d227747b28e91e1","analyzedAt":"2026-08-29T11:43:24.718Z","schemaVersion":2},"datasetVersion":"2026-08-29T12:17:43.993Z"}