/**
 * Shared type surface for the action system — `Action` (the composable
 * `{spec, handler?}` tuple) and re-exports of the canonical `ActionContext`
 * + `ActionHandler` shapes.
 *
 * Sits above `actions/action_spec.ts` (pure Zod schemas) and below the
 * dispatchers (`actions/register_action_ws.ts`, `actions/action_rpc.ts`,
 * `actions/perform_action.ts`). Extracted so the shared protocol actions
 * (e.g. `heartbeat_action`) can name them without pulling in server-only
 * modules.
 *
 * HTTP RPC and WebSocket dispatchers both call into `perform_action`,
 * and both pass the same `ActionContext` to the handler. Consumers
 * inject domain deps via factory closures the same way HTTP RPC
 * factories do (see `auth/standard_rpc_actions.ts`).
 *
 * @module
 */
export {};
