lib/mix/tasks/openagents.voice.release_control.ex

main at 436d37facc96 · 1 KB

defmodule Mix.Tasks.Openagents.Voice.ReleaseControl do
  use Mix.Task

  @shortdoc "Append a governed voice admission state"

  @impl Mix.Task
  def run(arguments) do
    {options, remaining, invalid} =
      OptionParser.parse(arguments,
        strict: [state: :string, reason: :string, actor: :string, revision: :string]
      )

    if invalid != [] or remaining != [], do: Mix.raise("invalid release-control arguments")

    start_operational_application()

    case OpenAgents.Voice.ReleaseControl.append(%{
           state: Keyword.get(options, :state),
           reason: Keyword.get(options, :reason),
           actor: Keyword.get(options, :actor),
           source_revision: Keyword.get(options, :revision)
         }) do
      {:ok, control} ->
        Mix.shell().info(
          Jason.encode!(%{
            schema: "openagents.voice_release_control_result.v1",
            id: control.id,
            state: control.state,
            inserted_at: control.inserted_at
          })
        )

      {:error, changeset} ->
        Mix.raise("release control refused: #{inspect(changeset.errors)}")
    end
  end

  defp start_operational_application do
    Application.put_env(:openagents, :turn_recovery_worker_enabled, false)
    Application.put_env(:openagents, :voice_recovery_worker_enabled, false)
    Application.put_env(:openagents, :voice_retention_worker_enabled, false)
    Mix.Task.run("app.start")
  end
end