mix.exs

defmodule CommBus.MixProject do
  use Mix.Project

  @version "0.1.0"

  def project do
    [
      app: :comm_bus,
      version: @version,
      elixir: "~> 1.19",
      start_permanent: Mix.env() == :prod,
      deps: deps(),

      # Hex metadata
      name: "CommBus",
      description:
        "Conversational context assembly for LLM interactions with keyword-triggered entry injection and token budget management",
      source_url: "https://github.com/fosferon/comm_bus",
      homepage_url: "https://github.com/fosferon/comm_bus",
      package: package(),
      docs: docs()
    ]
  end

  # Run "mix help compile.app" to learn about applications.
  def application do
    [
      extra_applications: [:logger],
      mod: {CommBus.Application, []}
    ]
  end

  # Run "mix help deps" to learn about dependencies.
  defp deps do
    [
      {:bbmustache, "~> 1.12"},
      {:ex_mustache, "~> 0.2.0"},
      {:yaml_elixir, "~> 2.12"},
      {:file_system, "~> 1.1"},
      {:alf, "~> 0.12"},
      {:ecto, "~> 3.13"},
      {:telemetry_metrics, "~> 1.1"},
      {:stream_data, "~> 1.2", only: :test},
      {:ex_doc, "~> 0.40", only: :dev, runtime: false}
    ]
  end

  defp package do
    [
      name: "comm_bus",
      licenses: ["MIT"],
      links: %{
        "GitHub" => "https://github.com/fosferon/comm_bus",
        "Changelog" => "https://github.com/fosferon/comm_bus/blob/main/CHANGELOG.md"
      },
      maintainers: ["Leonidas"],
      files: ~w(lib config .formatter.exs mix.exs README.md CHANGELOG.md LICENSE)
    ]
  end

  defp docs do
    [
      main: "readme",
      source_ref: "v#{@version}",
      source_url_pattern: "https://github.com/fosferon/comm_bus/blob/v#{@version}/{path}#L{line}",
      extras: [
        "README.md",
        "CHANGELOG.md",
        "docs/adopting_commbus.md",
        "docs/integration.md"
      ],
      groups_for_extras: [
        Guides: ~r/docs\/.*/
      ],
      groups_for_modules: [
        Core: [
          CommBus,
          CommBus.Assembler,
          CommBus.Matcher,
          CommBus.Budget,
          CommBus.Budget.Planner
        ],
        "Data Structures": [
          CommBus.Entry,
          CommBus.Message,
          CommBus.Conversation,
          CommBus.Context,
          CommBus.Protocol.Packet
        ],
        "Template System": [
          CommBus.Template,
          CommBus.Template.Engine,
          CommBus.Template.Engine.BbMustache,
          CommBus.Template.Engine.ExMustache,
          CommBus.Template.Loader,
          CommBus.Template.Validator,
          CommBus.Template.Prompt
        ],
        Prompts: [
          CommBus.Prompts,
          CommBus.Prompts.Runtime,
          CommBus.Prompts.Watcher,
          CommBus.Prompts.OverrideStore
        ],
        "Protocol & Pipeline": [
          CommBus.Protocol.Pipeline,
          CommBus.Protocol.Adapter,
          CommBus.Protocol.LlmCoreAdapter
        ],
        Storage: [
          CommBus.Storage,
          CommBus.Storage.InMemory,
          CommBus.Storage.EctoAdapter
        ],
        Methodologies: [
          CommBus.Methodology,
          CommBus.Methodologies
        ],
        Utilities: [
          CommBus.Tokenizer,
          CommBus.Tokenizer.Simple,
          CommBus.Semantic,
          CommBus.Semantic.Adapter,
          CommBus.Semantic.Simple,
          CommBus.Telemetry
        ],
        "Mix Tasks": [
          Mix.Tasks.CommBus.Budget,
          Mix.Tasks.CommBus.CompareEngines,
          Mix.Tasks.CommBus.Entries,
          Mix.Tasks.CommBus.Simulate,
          Mix.Tasks.CommBus.SyncFixtures
        ]
      ]
    ]
  end
end