defmodule Scoria do
@moduledoc """
Public facade for Phoenix-hosted Scoria runtime integration.
Start here when wiring Scoria into an application. The happy path is:
1. Normalize request or session context with `identity/1`
2. Start a durable run with `start_run/2`
3. Persist the returned `run_id`
4. Inspect or resume that exact run through the same module
`session_id` is the host-owned continuity key that groups related turns.
`run_id` is Scoria's exact durable handle for one run. Reuse a `session_id`
across turns, but resume only by `run_id`.
For edge normalization details, see `Scoria.Identity`. For deeper lifecycle
APIs behind this facade, see `Scoria.Runtime`.
## Examples
iex> identity =
...> Scoria.identity(%{
...> actor_id: "user_123",
...> tenant_id: "tenant_456",
...> session_id: "session_789"
...> })
iex> {identity.actor_id, identity.tenant_id, identity.session_id}
{"user_123", "tenant_456", "session_789"}
iex> identity.metadata
%{}
"""
alias Scoria.Runtime
@doc """
Normalizes caller-supplied edge identity into the canonical runtime envelope.
"""
def identity(attrs \\ %{}), do: Scoria.Identity.normalize(attrs)
@doc """
Starts a run through the canonical public runtime facade.
"""
def start_run(identity, opts \\ []), do: Runtime.start_run(identity, opts)
@doc """
Starts a bounded delegated run with one explicit handoff and projected context.
"""
def start_handoff_run(identity, delegated_role_id, opts \\ []),
do: Runtime.start_handoff_run(identity, delegated_role_id, opts)
@doc """
Resumes a run by exact durable `run_id`.
"""
def resume_run(run_id, opts \\ []), do: Runtime.resume_run(run_id, opts)
@doc """
Returns the stable public summary for a run.
"""
def get_run(run_id), do: Runtime.get_run(run_id)
@doc """
Returns the stable public summary for a run or raises.
"""
def get_run!(run_id), do: Runtime.get_run!(run_id)
@doc """
Returns the curated detailed public view for a run.
"""
def get_run_detail(run_id), do: Runtime.get_run_detail(run_id)
@doc """
Returns the curated detailed public view for a run or raises.
"""
def get_run_detail!(run_id), do: Runtime.get_run_detail!(run_id)
@doc """
Lists runs that share the same host-owned `session_id`.
"""
def list_runs_for_session(session_id), do: Runtime.list_runs_for_session(session_id)
end