defmodule Agentix.MixProject do use Mix.Project @version "0.2.0" @source_url "https://github.com/hawkyre/agentix" def project do [ app: :agentix, version: @version, elixir: "~> 1.20", start_permanent: Mix.env() == :prod, elixirc_paths: elixirc_paths(Mix.env()), deps: deps(), aliases: aliases(), # Tooling dialyzer: dialyzer(), test_coverage: [tool: ExCoveralls], # Hex description: description(), package: package(), # Docs name: "Agentix", source_url: @source_url, docs: docs() ] end def application do [ extra_applications: [:logger], mod: {Agentix.Application, []} ] end # Modern Mix moves preferred envs out of project/0 and into cli/0. def cli do [ preferred_envs: [ check: :test, coveralls: :test, "coveralls.detail": :test, "coveralls.html": :test, "coveralls.github": :test ] ] end defp elixirc_paths(:test), do: ["lib", "test/support"] defp elixirc_paths(_), do: ["lib"] defp deps do [ # Core — ReqLLM provides provider abstraction and the canonical typed model. {:req_llm, "~> 1.16"}, # Core — the live-event backbone for every streaming transport. Pulls no # Phoenix/web deps; a zero-pubsub consumer sets `notifier: Agentix.Notifier.None`. {:phoenix_pubsub, "~> 2.2"}, # Optional — the LiveView layer (`Agentix.Chat`) compiles only when present. # Headless/API consumers omit it entirely; its modules are conditionally defined. {:phoenix_live_view, "~> 1.2", optional: true}, # Optional — the Ecto/Postgres persistence adapter (`Agentix.Persistence.Ecto`) # and its Oban-backed expiry. ETS (the default) and core need none of these; a # host opts in by depending on them and configuring the Ecto adapter. {:ecto_sql, "~> 3.14", optional: true}, {:postgrex, "~> 0.22", optional: true}, {:oban, "~> 2.20", optional: true}, # Dev/test tooling {:credo, "~> 1.7", only: [:dev, :test], runtime: false}, {:dialyxir, "~> 1.4", only: [:dev, :test], runtime: false}, {:styler, "~> 1.11", only: [:dev, :test], runtime: false}, {:mix_audit, "~> 2.1", only: [:dev, :test], runtime: false}, {:ex_doc, "~> 0.40", only: :dev, runtime: false}, {:excoveralls, "~> 0.18", only: :test, runtime: false}, # `Phoenix.LiveViewTest` parses rendered markup through LazyHTML. {:lazy_html, "~> 0.1", only: :test} ] end # One-shot quality gate: `mix check`. defp aliases do [ check: [ "format --check-formatted", "deps.unlock --check-unused", "credo --strict", "deps.audit", "dialyzer", "test" ] ] end defp dialyzer do [ plt_add_apps: [:ex_unit, :mix, :phoenix_pubsub, :phoenix_live_view], plt_local_path: "priv/plts", plt_core_path: "priv/plts", flags: [:error_handling, :extra_return, :missing_return, :unknown] ] end defp description do "A LiveView-native library for building agentic systems in Elixir, built on ReqLLM." end defp package do [ licenses: ["MIT"], links: %{ "GitHub" => @source_url, "Changelog" => "#{@source_url}/blob/main/CHANGELOG.md", "HexDocs" => "https://hexdocs.pm/agentix" }, files: ~w(lib priv/static priv/templates guides mix.exs README.md CHANGELOG.md LICENSE .formatter.exs) ] end defp docs do [ main: "readme", source_ref: "v#{@version}", extras: [ "README.md", "guides/installation.md", "guides/architecture.md", "guides/hooks-and-turn-lifecycle.md", "guides/tools.md", "guides/persistence-and-resumability.md", "guides/reliability-and-structured-output.md", "guides/compaction.md", "guides/rendering.md", "guides/memory-and-sizing.md", "CHANGELOG.md" ], groups_for_extras: [ Guides: ~r"guides/.*" ], groups_for_modules: [ Core: [ Agentix, Agentix.Conversation, Agentix.Conversation.Config, Agentix.Scope, Agentix.Event, Agentix.Executor ], "Tools & HITL": [Agentix.Tool, Agentix.Turn], Hooks: [Agentix.Hook, Agentix.Hook.OverflowError], "Compaction & tokens": [Agentix.Tokenizer, Agentix.Tokenizer.Heuristic], Persistence: [ Agentix.Persistence, Agentix.Persistence.ETS, Agentix.Persistence.Ecto ], Providers: [ Agentix.Provider, Agentix.Provider.Stream, Agentix.Provider.ReqLLM, Agentix.Retry ], "Events & notifiers": [ Agentix.Notifier, Agentix.Notifier.PubSub, Agentix.Notifier.None ], "Rendering (LiveView)": [Agentix.Chat, Agentix.Components], Testing: [Agentix.Test, Agentix.Test.MockProvider] ] ] end end