defmodule GeminiCliSdk.MixProject do
use Mix.Project
@version "0.1.0"
def project do
[
app: :gemini_cli_sdk,
version: @version,
elixir: "~> 1.14",
elixirc_paths: elixirc_paths(Mix.env()),
start_permanent: Mix.env() == :prod,
deps: deps(),
description:
"An Elixir SDK for the Gemini CLI — Build AI-powered applications with Google Gemini",
package: package(),
docs: docs(),
dialyzer: dialyzer(),
source_url: "https://github.com/nshkrdotcom/gemini_cli_sdk"
]
end
def application do
[
extra_applications: [:logger],
mod: {GeminiCliSdk.Application, []}
]
end
def cli do
[
preferred_envs: [
"test.live": :test,
"run.live": :dev
]
]
end
defp elixirc_paths(:test), do: ["lib", "test/support"]
defp elixirc_paths(_), do: ["lib"]
defp deps do
[
{:erlexec, "~> 2.0"},
{:jason, "~> 1.4"},
{:ex_doc, "~> 0.40", only: :dev, runtime: false},
{:dialyxir, "~> 1.0", only: [:dev], runtime: false},
{:credo, "~> 1.6", only: [:dev, :test], runtime: false}
]
end
defp package do
[
name: "gemini_cli_sdk",
licenses: ["MIT"],
links: %{
"GitHub" => "https://github.com/nshkrdotcom/gemini_cli_sdk"
},
maintainers: [{"NSHkr", "ZeroTrust@NSHkr.com"}],
files: ~w(lib mix.exs README.md LICENSE CHANGELOG.md .formatter.exs)
]
end
defp docs do
[
main: "readme",
name: "GeminiCliSdk",
source_ref: "v#{@version}",
source_url: "https://github.com/nshkrdotcom/gemini_cli_sdk",
homepage_url: "https://hex.pm/packages/gemini_cli_sdk",
assets: %{"assets" => "assets"},
logo: "assets/gemini_cli_sdk.svg",
extras: [
"README.md",
"guides/getting-started.md",
"guides/streaming.md",
"guides/synchronous.md",
"guides/options.md",
"guides/models.md",
"guides/configuration.md",
"guides/sessions.md",
"guides/error-handling.md",
"guides/architecture.md",
"guides/testing.md",
"CHANGELOG.md",
"LICENSE"
],
groups_for_extras: [
Introduction: [
"README.md",
"guides/getting-started.md"
],
Guides: [
"guides/streaming.md",
"guides/synchronous.md",
"guides/options.md",
"guides/models.md",
"guides/configuration.md",
"guides/sessions.md",
"guides/error-handling.md"
],
Advanced: [
"guides/architecture.md",
"guides/testing.md"
],
"Release Notes": ["CHANGELOG.md", "LICENSE"]
],
groups_for_modules: [
"Public API": [GeminiCliSdk],
Types: [
GeminiCliSdk.Types,
GeminiCliSdk.Types.InitEvent,
GeminiCliSdk.Types.MessageEvent,
GeminiCliSdk.Types.ToolUseEvent,
GeminiCliSdk.Types.ToolResultEvent,
GeminiCliSdk.Types.ErrorEvent,
GeminiCliSdk.Types.ResultEvent,
GeminiCliSdk.Types.Stats
],
Errors: [GeminiCliSdk.Error],
Configuration: [
GeminiCliSdk.Options,
GeminiCliSdk.Models,
GeminiCliSdk.Configuration,
GeminiCliSdk.CLI,
GeminiCliSdk.ArgBuilder,
GeminiCliSdk.Env,
GeminiCliSdk.Config
],
Internals: [
GeminiCliSdk.Stream,
GeminiCliSdk.Command,
GeminiCliSdk.Session,
GeminiCliSdk.Transport,
GeminiCliSdk.Transport.Erlexec,
GeminiCliSdk.Exec
]
],
before_closing_head_tag: &before_closing_head_tag/1,
before_closing_body_tag: &before_closing_body_tag/1
]
end
defp before_closing_head_tag(:html) do
"""
"""
end
defp before_closing_head_tag(:epub), do: ""
defp before_closing_body_tag(:html), do: ""
defp before_closing_body_tag(:epub), do: ""
defp dialyzer do
[
plt_file: {:no_warn, "priv/plts/dialyzer.plt"},
plt_add_apps: [:mix]
]
end
end