(defio
  "query"
  :category :data
  :params (service name &rest kwargs)
  :returns "any"
  :doc "Fetch data from another service.")

(defio
  "action"
  :category :effect
  :params (service name &rest kwargs)
  :returns "any"
  :doc "Execute a mutation on another service.")

(defio
  "helper"
  :category :data
  :params (name &rest args)
  :returns "any"
  :doc "Call a page helper function.")

(defio
  "frag"
  :category :data
  :params (service type &rest kwargs)
  :returns "string"
  :doc "Fetch HTML fragment from another service.")

(defio
  "service"
  :category :data
  :params (service-or-method &rest args)
  :returns "any"
  :doc "Call a domain service method.")

(defio
  "request-arg"
  :category :data
  :params (name &optional default)
  :returns "any"
  :doc "Read a URL query parameter.")

(defio
  "request-method"
  :category :data
  :params ()
  :returns "string"
  :doc "Current HTTP method.")

(defio
  "request-path"
  :category :data
  :params ()
  :returns "string"
  :doc "Current request path.")

(defio
  "request-form"
  :category :data
  :params (name &optional default)
  :returns "any"
  :doc "Read a form field.")

(defio
  "request-json"
  :category :data
  :params ()
  :returns "dict?"
  :doc "Read JSON body.")

(defio
  "request-header"
  :category :data
  :params (name &optional default)
  :returns "string?"
  :doc "Read a request header.")

(defio
  "request-content-type"
  :category :data
  :params ()
  :returns "string?"
  :doc "Content-Type of current request.")

(defio
  "request-args-all"
  :category :data
  :params ()
  :returns "dict"
  :doc "All query parameters as dict.")

(defio
  "request-form-all"
  :category :data
  :params ()
  :returns "dict"
  :doc "All form fields as dict.")

(defio
  "request-form-list"
  :category :data
  :params (field)
  :returns "list"
  :doc "Multi-value form field.")

(defio
  "request-headers-all"
  :category :data
  :params ()
  :returns "dict"
  :doc "All request headers as dict.")

(defio
  "request-file-name"
  :category :data
  :params (field)
  :returns "string?"
  :doc "Uploaded file name by field.")

(defio
  "request-view-args"
  :category :data
  :params (key)
  :returns "any"
  :doc "URL path parameter.")

(defio
  "ctx"
  :category :data
  :params (key)
  :returns "any"
  :doc "Read from render context.")

(defio
  "current-user"
  :category :data
  :params ()
  :returns "dict?"
  :doc "Current authenticated user.")

(defio
  "htmx-request?"
  :category :data
  :params ()
  :returns "boolean"
  :doc "Is this an HTMX request?")

(defio
  "csrf-token"
  :category :data
  :params ()
  :returns "string"
  :doc "Current CSRF token.")

(defio
  "app-rights"
  :category :data
  :params ()
  :returns "dict"
  :doc "Current user's rights.")

(defio
  "nav-tree"
  :category :data
  :params ()
  :returns "list"
  :cacheable true
  :doc "Navigation structure.")

(defio
  "get-children"
  :category :data
  :params (&rest kwargs)
  :returns "list"
  :doc "Child entities.")

(defio
  "relations-from"
  :category :data
  :params (entity-type)
  :returns "list"
  :cacheable true
  :doc "Relation definitions for entity type.")

(defio
  "config"
  :category :data
  :params (key)
  :returns "any"
  :cacheable true
  :doc "Read from host configuration.")

(defio
  "jinja-global"
  :category :data
  :params (key &optional default)
  :returns "any"
  :doc "Read a Jinja global.")

(defio
  "url-for"
  :category :data
  :params (endpoint &rest kwargs)
  :returns "string"
  :doc "Generate URL for endpoint.")

(defio
  "route-prefix"
  :category :data
  :params ()
  :returns "string"
  :doc "Service URL prefix.")

(defio
  "app-url"
  :category :data
  :params (service &optional path)
  :returns "string"
  :cacheable true
  :doc "Full URL for a service.")

(defio
  "asset-url"
  :category :data
  :params (&rest path)
  :returns "string"
  :cacheable true
  :doc "Versioned static asset URL.")

(defio
  "set-response-status"
  :category :effect
  :params (status)
  :returns "nil"
  :doc "Set HTTP response status code.")

(defio
  "set-response-header"
  :category :effect
  :params (name value)
  :returns "nil"
  :doc "Set HTTP response header.")

(defio
  "abort"
  :category :effect
  :params (status &optional message)
  :returns "nil"
  :doc "Raise HTTP error.")

(defio
  "state-get"
  :category :data
  :params (key &optional default)
  :returns "any"
  :doc "Read ephemeral per-process state.")

(defio
  "state-set!"
  :category :effect
  :params (key value)
  :returns "nil"
  :doc "Write ephemeral per-process state.")

(defio
  "now"
  :category :data
  :params (&optional fmt)
  :returns "string"
  :doc "Current timestamp.")

(defio
  "sleep"
  :category :effect
  :params (ms)
  :returns "nil"
  :doc "Pause execution.")

(defio
  "g"
  :category :data
  :params (key)
  :returns "any"
  :doc "Read from Quart g object.")

(defio
  "json-encode"
  :category :code
  :params (&rest values)
  :returns "string"
  :cacheable true
  :doc "JSON-serialize values.")

(defio
  "into"
  :category :code
  :params (&rest args)
  :returns "any"
  :cacheable true
  :doc "Template composition.")

(defio
  "highlight"
  :category :code
  :params (code &optional lang)
  :returns "sx-source"
  :batchable true
  :cacheable true
  :doc "Syntax-highlight code.")

(defio
  "component-source"
  :category :code
  :params (name)
  :returns "string"
  :batchable true
  :cacheable true
  :doc "Pretty-printed component source.")

(defio
  "text-measure"
  :category :data
  :params (font size text)
  :returns "dict"
  :cacheable true
  :doc "Measure text glyph metrics. Returns {:width :height :ascent :descent}.")
