actions/heartbeat.ts view source
Action<{ method: string; initiator: "frontend" | "backend" | "both"; side_effects: boolean; input: ZodType<unknown, unknown, $ZodTypeInternals<unknown, unknown>>; output: ZodType<unknown, unknown, $ZodTypeInternals<unknown, unknown>>; ... 6 more ...; rate_limit?: "both" | ... 2 more ... | undefined; } | { ...; } | {... Protocol-action tuple — spread into the server's actions array for
dispatch (or via protocol_actions from actions/protocol.ts) so the
dispatcher resolves the heartbeat handler. The frontend-side spread
happens via protocol_action_specs — the client doesn't run the echo
handler, but the spec must be in ActionRegistry so create_rpc_client
types app.api.heartbeat() against the shared spec.