Packages

Prompt Runner SDK - packet-first prompt execution for Elixir and CLI workflows with verifier-owned completion, retry, repair, and git-aware repository orchestration.

Current section

Files

Jump to
prompt_runner_sdk lib prompt_runner commit_messages.ex
Raw

lib/prompt_runner/commit_messages.ex

defmodule PromptRunner.CommitMessages do
@moduledoc false
@spec get_message(PromptRunner.Config.t(), String.t(), String.t() | nil) :: String.t() | nil
def get_message(config, num, repo_name \\ nil) do
content = File.read!(config.commit_messages_file)
markers_to_try =
if repo_name do
["=== COMMIT #{num}:#{repo_name} ===", "=== COMMIT #{num} ==="]
else
["=== COMMIT #{num} ==="]
end
find_commit_message(content, markers_to_try)
end
@spec all_markers(PromptRunner.Config.t()) :: list({String.t(), String.t() | nil})
def all_markers(config) do
content = File.read!(config.commit_messages_file)
~r/=== COMMIT (\d+)(?::(\w+))? ===/
|> Regex.scan(content)
|> Enum.map(fn
[_, num, repo] -> {num, repo}
[_, num] -> {num, nil}
end)
end
defp find_commit_message(_content, []), do: nil
defp find_commit_message(content, [marker | rest]) do
case String.split(content, marker) do
[_, after_marker] ->
msg = extract_message_until_next_marker(after_marker)
if String.trim(msg) != "" do
String.trim(msg)
else
find_commit_message(content, rest)
end
_ ->
find_commit_message(content, rest)
end
end
defp extract_message_until_next_marker(text) do
case String.split(text, ~r/\n=== COMMIT /, parts: 2) do
[msg | _] -> msg
_ -> text
end
end
end