defmodule ElGraph.MixProject do use Mix.Project def project do [ app: :el_graph, version: "0.3.0", build_path: "../../_build", config_path: "../../config/config.exs", deps_path: "../../deps", lockfile: "../../mix.lock", elixir: "~> 1.18", elixirc_paths: elixirc_paths(Mix.env()), start_permanent: Mix.env() == :prod, deps: deps(), dialyzer: dialyzer(), description: "Graph-first agent framework on the BEAM — durable execution, HITL, time-travel, " <> "checkpoints, agents, and bidirectional MCP. No Python.", source_url: "https://github.com/showjihyun/ElGraph", name: "ElGraph", docs: [ main: "readme", extras: ["README.md": [title: "Overview"], LICENSE: [title: "License"]], source_ref: "v0.3.0" ], package: package() ] end # hex 패키지 메타데이터(코어). 형제 앱(el_graph_web/ecto/redis/otel, el_trace)도 출시 시 동일 패턴. defp package do [ licenses: ["MIT"], maintainers: ["Poor Coin Pepe"], links: %{ "GitHub" => "https://github.com/showjihyun/ElGraph", "Changelog" => "https://github.com/showjihyun/ElGraph/blob/main/CHANGELOG.md" }, files: ~w(lib mix.exs README.md LICENSE) ] end # Dialyzer 정적 타입 분석 (SPEC §10 품질 게이트). PLT는 _build에 캐시. # 외부 의존성/사전 존재 경고는 `.dialyzer_ignore.exs`로 격리한다. defp dialyzer do [ ignore_warnings: ".dialyzer_ignore.exs", flags: [:error_handling, :missing_return] ] end def application do [ # :mnesia — BEAM 내장(외부 의존성 아님). Checkpointer.Mnesia 어댑터용. extra_applications: [:logger, :mnesia] ] end defp elixirc_paths(:test), do: ["lib", "test/support"] defp elixirc_paths(_env), do: ["lib"] defp deps do [ {:telemetry, "~> 1.3"}, {:nimble_options, "~> 1.1"}, {:jason, "~> 1.4"}, {:req, "~> 0.5"}, # executor의 OTel 컨텍스트 전파용 API only — SDK/exporter/브리지는 `el_graph_otel`이 격리한다 (SPEC §13). {:opentelemetry_api, "~> 1.4"}, {:plug, "~> 1.16", only: :test}, {:dialyxir, "~> 1.4", only: [:dev, :test], runtime: false}, # hexdocs 발행용(`mix hex.publish`의 docs 단계). 코어를 독립 패키지로 출시할 때 필요. {:ex_doc, "~> 0.34", only: :dev, runtime: false} ] end end