defmodule Pixir.MixProject do use Mix.Project @version "0.1.0" @source_url "https://github.com/ranvier2d2/pixir-harness" def project do [ app: :pixir, version: @version, elixir: "~> 1.19", start_permanent: Mix.env() == :prod, elixirc_paths: elixirc_paths(Mix.env()), escript: escript(), deps: deps(), aliases: aliases(), description: description(), package: package(), docs: docs() ] 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, :crypto, :public_key], mod: {Pixir.Application, []} ] end defp escript do # +Bi ignores the BEAM break handler so a companion shell trap can forward # SIGINT as SIGUSR1 during CLI Turn execution (issue #24). [main_module: Pixir.CLI, name: "pixir", emu_args: "-Bi"] end defp description do "OTP-native, local-first coding agent runtime with ACP, Skills, Subagents, and Workflows." end defp docs do adr_extras = Path.wildcard("docs/adr/*.md") example_paths = Path.wildcard("docs/examples/**/*.md") example_extras = Enum.map(example_paths, &{&1, [filename: doc_extra_filename(&1)]}) quickstart = "docs/open-beta-quickstart.md" [ main: "readme", source_url: @source_url, source_ref: "main", extras: [ {"README.md", [filename: "readme", title: "Pixir"]}, "CONTEXT.md", "docs/ROADMAP.md", quickstart ] ++ adr_extras ++ example_extras, groups_for_extras: [ "Project Context": ["CONTEXT.md", "docs/ROADMAP.md", quickstart], ADRs: adr_extras, Examples: example_paths ], groups_for_modules: [ "Runtime Core": [ Pixir, Pixir.Application, Pixir.Event, Pixir.Events, Pixir.Log, Pixir.Session, Pixir.SessionSupervisor, Pixir.Turn, Pixir.Conversation ], "Provider And Auth": ~r/^Pixir\.(Provider|Auth)/, "Agent Practices": [Pixir.Agents, Pixir.Skills, Pixir.Subagents, Pixir.Workflows], Tools: ~r/^Pixir\.Tools?/, ACP: ~r/^Pixir\.ACP/ ] ] end defp doc_extra_filename(path) do path |> Path.rootname() |> String.replace("/", "-") |> String.downcase() end defp deps do [ {:ex_doc, "~> 0.40.3", only: :dev, runtime: false}, {:finch, "~> 0.18"}, {:jason, "~> 1.4"} ] end defp package do [ files: package_files(), licenses: ["MIT"], links: %{"GitHub" => @source_url} ] end defp package_files do [ ".formatter.exs", "CONTEXT.md", "LICENSE", "README.md", "mix.exs", "docs/ROADMAP.md", "docs/open-beta-daily-driver-ritual.md", "docs/open-beta-quickstart.md", "docs/release-notes/open-beta-developer-preview.md" ] ++ Path.wildcard("lib/**/*.ex") ++ Path.wildcard("docs/adr/[0-9][0-9][0-9][0-9]-*.md") ++ Path.wildcard("docs/examples/**/README.md") ++ Path.wildcard("docs/examples/**/SKILL.md") end defp aliases do [ check: [ "format --check-formatted", "compile --warnings-as-errors", "cmd env MIX_ENV=test mix do compile --warnings-as-errors + test --warnings-as-errors", "escript.build", "cmd ./pixir doctor --json", "pixir.smoke.workflows --dry-run --json", "pixir.smoke.prompt_cache --dry-run --json", "pixir.smoke.websocket --dry-run --json", "docs --warnings-as-errors" ] ] end end