defmodule Ectomancer.MixProject do use Mix.Project @source_url "https://github.com/GustavoZiaugra/ectomancer" @version "1.4.0" def project do [ app: :ectomancer, version: @version, elixir: "~> 1.18", start_permanent: Mix.env() == :prod, elixirc_paths: elixirc_paths(Mix.env()), deps: deps(), name: "Ectomancer", description: "Add an AI brain to your Phoenix app - Auto-expose Ecto schemas as MCP tools", package: package(), docs: docs(), source_url: @source_url, homepage_url: @source_url, dialyzer: [plt_add_apps: [:mix, :ex_unit]], test_coverage: [summary: [threshold: 80]] ] end defp elixirc_paths(:test), do: ["lib", "test/support"] defp elixirc_paths(_), do: ["lib"] # Run "mix help compile.app" to learn about applications. def application do [ extra_applications: [:logger], mod: {Ectomancer.Application, []} ] end defp package do [ name: :ectomancer, files: ["lib", "mix.exs", "README.md", "LICENSE", "CHANGELOG.md"], maintainers: ["Gustavo Ziaugra"], licenses: ["MIT"], links: %{ "GitHub" => @source_url, "Changelog" => "#{@source_url}/blob/main/CHANGELOG.md" } ] end defp docs do [ main: "Ectomancer", extras: ["README.md", "CHANGELOG.md", "LICENSE"], source_url: @source_url, source_ref: "v#{@version}", groups_for_modules: [ Core: [Ectomancer, Ectomancer.Tool, Ectomancer.Expose], Integration: [ Ectomancer.Plug, Ectomancer.Repo, Ectomancer.RouteIntrospection, Ectomancer.ObanBridge ], Utilities: [Ectomancer.SchemaBuilder, Ectomancer.SchemaIntrospection], Installer: [ Ectomancer.Installer.ConfigUpdater, Ectomancer.Installer.DependencyChecker, Ectomancer.Installer.SchemaDiscovery, Ectomancer.Installer.TemplateRenderer ] ] ] end # Run "mix help deps" to learn about dependencies. defp deps do [ # MCP Server Implementation (fork of Hermes, more actively maintained) {:anubis_mcp, "~> 1.5"}, # JSON handling {:jason, "~> 1.4"}, # Optional dependencies (only loaded if parent app uses them) {:phoenix, ">= 1.7.0", optional: true}, {:ecto, "~> 3.12", optional: true}, {:plug, "~> 1.16", optional: true}, {:oban, "~> 2.18", optional: true}, # Development and testing {:credo, "~> 1.7", only: [:dev, :test], runtime: false}, {:ex_doc, "~> 0.34", only: :dev, runtime: false}, {:plurality, "~> 0.2"}, {:dialyxir, "~> 1.4", only: [:dev, :test], runtime: false}, # Database testing {:ecto_sqlite3, "~> 0.22", only: :test} ] end end