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