mix.exs

defmodule LlmCore.MixProject do
  use Mix.Project

  @version "0.3.0"
  @source_url "https://github.com/fosferon/llm_core"

  def project do
    [
      app: :llm_core,
      version: @version,
      elixir: "~> 1.19",
      start_permanent: Mix.env() == :prod,
      deps: deps(),
      description: description(),
      package: package(),
      source_url: @source_url,
      docs: docs()
    ]
  end

  # Run "mix help compile.app" to learn about applications.
  def application do
    [
      mod: {LlmCore.Application, []},
      extra_applications: [:logger, :crypto]
    ]
  end

  defp description do
    "Provider-agnostic LLM orchestration for Elixir. " <>
      "Composable ALF pipelines, hot-reload TOML config, CLI provider support, " <>
      "in-process agentic loops, structured output, and semantic memory."
  end

  defp package do
    [
      licenses: ["MIT"],
      links: %{
        "GitHub" => @source_url
      }
    ]
  end

  defp docs do
    [
      main: "readme",
      source_ref: "v#{@version}",
      extras: [
        "README.md",
        "docs/configuration.md",
        "docs/architecture.md",
        "docs/cli-providers.md",
        "docs/agent-loop.md"
      ],
      groups_for_modules: [
        "Public API": [LlmCore],
        Providers: [LlmCore.LLM.Provider, LlmCore.LLM.CLIProvider, LlmCore.LLM.Response, LlmCore.LLM.Error],
        Routing: [LlmCore.Router, LlmCore.Router.ResolvedRoute, LlmCore.Router.RoutingTable, LlmCore.Router.RouteEntry],
        Configuration: [LlmCore.Config.Store, LlmCore.Config.Loader, LlmCore.Config.Watcher],
        "Agent Loop": [LlmCore.Agent, LlmCore.Agent.Loop, LlmCore.Agent.Context, LlmCore.Agent.Registry],
        "Structured Output": [LlmCore.Structured],
        Memory: [LlmCore.Memory.Hindsight],
        Registries: [LlmCore.Provider.Registry, LlmCore.Provider.Definition, LlmCore.CLIProvider.Registry],
        Pipelines: [LlmCore.Pipelines.InferencePipeline, LlmCore.Pipelines.RoutingPipeline, LlmCore.Pipelines.MemoryPipeline]
      ]
    ]
  end

  # Run "mix help deps" to learn about dependencies.
  defp deps do
    [
      # Tool contract + base tools (ToolResolver, Tool, Call, Result)
      {:llm_toolkit, "~> 0.1"},
      {:req, "~> 0.5"},
      {:jason, "~> 1.4"},
      {:yaml_elixir, "~> 2.9"},
      {:toml, "~> 0.7"},
      {:file_system, "~> 1.0"},
      {:telemetry, "~> 1.2"},
      {:typed_struct, "~> 0.3"},
      {:alf, "~> 0.12"},
      {:ex_doc, "~> 0.36", only: :dev, runtime: false},
      {:earmark, "~> 1.4", only: :dev, runtime: false},
      {:mox, "~> 1.0", only: :test},
      {:stream_data, "~> 1.0", only: :test},
      {:comm_bus, "~> 0.1"}
    ]
  end
end