Current section
Files
Jump to
Current section
Files
lib/jido_ai/skill/error.ex
defmodule Jido.AI.Skill.Error do
@moduledoc """
Splode-based error handling for skill operations.
"""
use Splode,
error_classes: [
parse: Jido.AI.Skill.Error.Parse,
validation: Jido.AI.Skill.Error.Validation
],
unknown_error: Jido.AI.Skill.Error.Unknown
end
defmodule Jido.AI.Skill.Error.Parse do
@moduledoc "Parse-level errors for SKILL.md files"
use Splode.ErrorClass,
class: :parse
end
defmodule Jido.AI.Skill.Error.Validation do
@moduledoc "Validation errors for skill specs"
use Splode.ErrorClass,
class: :validation
end
defmodule Jido.AI.Skill.Error.Unknown do
@moduledoc "Fallback error for unknown error types"
use Splode.Error,
fields: [:error],
class: :unknown
@impl true
def message(%{error: error}), do: "Unknown skill error: #{inspect(error)}"
end
# ============================================================================
# Parse Error Types
# ============================================================================
defmodule Jido.AI.Skill.Error.Parse.NoFrontmatter do
@moduledoc "No YAML frontmatter found in SKILL.md"
use Splode.Error,
fields: [:file_path],
class: :parse
@impl true
def message(%{file_path: file_path}), do: "No YAML frontmatter in #{file_path}"
end
defmodule Jido.AI.Skill.Error.Parse.InvalidYaml do
@moduledoc "Invalid YAML in frontmatter"
use Splode.Error,
fields: [:file_path, :reason],
class: :parse
@impl true
def message(%{file_path: file_path, reason: reason}), do: "Invalid YAML in #{file_path}: #{inspect(reason)}"
end
# ============================================================================
# Validation Error Types
# ============================================================================
defmodule Jido.AI.Skill.Error.Validation.InvalidName do
@moduledoc "Invalid skill name format"
use Splode.Error,
fields: [:name],
class: :validation
@impl true
def message(%{name: name}),
do: "Invalid skill name '#{name}': must be 1-64 chars, lowercase alphanumeric with hyphens"
end
defmodule Jido.AI.Skill.Error.Validation.MissingField do
@moduledoc "Required field missing"
use Splode.Error,
fields: [:field],
class: :validation
@impl true
def message(%{field: field}), do: "Missing required field: #{field}"
end
defmodule Jido.AI.Skill.Error.NotFound do
@moduledoc "Skill not found in registry"
use Splode.Error,
fields: [:name],
class: :validation
@impl true
def message(%{name: name}), do: "Skill not found: #{name}"
end