defmodule ExAgent.MixProject do use Mix.Project @version "0.4.0" @url_docs "https://hexdocs.pm/ex_agent" @url_github "https://github.com/tiagodavi/ex_agent" defp description do "An Elixir library for building multi-agent LLM applications." end defp package() do [ files: ~w(lib assets .formatter.exs mix.exs README* LICENSE* CHANGELOG* NOTICE), licenses: ["Apache-2.0"], maintainers: [ "Tiago Batista" ], links: %{ "Docs" => @url_docs, "Github" => @url_github } ] end defp docs do [ source_ref: "v#{@version}", source_url: @url_github, main: "readme", extra_section: "guides", extras: ["README.md", "CHANGELOG.md", "NOTICE", "LICENSE"], # Copied verbatim so the README's `assets/` image paths resolve the same # way on HexDocs as they do on GitHub. assets: %{"assets" => "assets"}, # Grouped to mirror the README's sections, so the sidebar reads the same # way as the guide. groups_for_modules: [ "Core API": [ExAgent], "Providers & roles": [ ExAgent.Provider, ExAgent.Providers.OpenAI, ExAgent.Providers.Gemini, ExAgent.Providers.OpenAICompatible, ExAgent.Providers.JinaV5, ExAgent.Providers.JinaRerankerM0, ExAgent.Roles ], Conversations: [ ExAgent.Agent, ExAgent.Message, ExAgent.Response, ExAgent.Chunk, ExAgent.Context, ExAgent.Tool, ExAgent.Skill, ExAgent.Error, ExAgent.Telemetry ], Files: [ ExAgent.Attachment, ExAgent.Source, ExAgent.FileRef, ExAgent.UploadCache ], "Structured output": [ExAgent.Schema], Embeddings: [ExAgent.Embeddings], Reranking: [ExAgent.Reranking], "Multi-agent patterns": [ ExAgent.Patterns.Chain, ExAgent.Patterns.Router, ExAgent.Patterns.Subagents, ExAgent.Patterns.Handoff, ExAgent.Patterns.Skills, ExAgent.Patterns.Reflection, ExAgent.Patterns.MapReduce, ExAgent.Patterns.Consensus ], Internals: [ ExAgent.SSE, ExAgent.AgentSupervisor, ExAgent.AgentDynamicSupervisor, ExAgent.Services.OpenAIService, ExAgent.Services.OpenAIEmbedService, ExAgent.Services.OpenAIUploadService, ExAgent.Services.OpenAICompatibleService, ExAgent.Services.GeminiService, ExAgent.Services.GeminiEmbedService, ExAgent.Services.GeminiUploadService, ExAgent.Services.Streaming ] ] ] end def project do [ app: :ex_agent, name: "ExAgent", source_url: @url_github, homepage_url: @url_docs, version: @version, elixir: "~> 1.18", start_permanent: Mix.env() == :prod, description: description(), package: package(), deps: deps(), docs: docs(), elixirc_paths: elixirc_paths(Mix.env()), elixirc_options: [ignore_module_conflict: true], source_url: @url_github ] end # Run "mix help compile.app" to learn about applications. def application do [ extra_applications: [:logger], mod: {ExAgent.Application, []} ] end # Run "mix help deps" to learn about dependencies. defp deps do [ # Floor is 0.7 rather than 0.5: everything below 0.6.1 carries # EEF-CVE-2026-49755, an unbounded-decompression DoS on response bodies. {:req, "~> 0.7"}, {:telemetry, "~> 1.0"}, {:jason, "~> 1.4"}, {:mime, "~> 2.0"}, {:nimble_options, "~> 1.1"}, # Optional: only needed for structured output and typed tool parameters, # where the schema *is* an Ecto embedded schema. {:ecto, "~> 3.10", optional: true}, {:ex_doc, "~> 0.34", only: :dev, runtime: false}, {:mox, "~> 1.1", only: :test}, {:plug, "~> 1.16", only: :test} ] end defp elixirc_paths(:test), do: ["lib", "test/support"] defp elixirc_paths(_), do: ["lib"] end