Current section
Files
Jump to
Current section
Files
lib/mix/tasks/spec.export.docs.ex
defmodule Mix.Tasks.Spec.Export.Docs do
use Mix.Task
@shortdoc "Copy handoff docs into another repo (agent protocol and receiver guide)"
@moduledoc """
Usage:
mix spec.export.docs --dest /path/to/other/repo
Copies:
- AGENTS.codex.md
- work/spec_requests/README.receivers.md
- work/spec_requests/*.schema.json (ack/message/request)
- work/spec_requests/ack.example.json
"""
@impl true
def run(argv) do
{opts, _, _} = OptionParser.parse(argv, switches: [dest: :string])
dest = Keyword.get(opts, :dest) || Mix.raise("Provide --dest")
# Copy AGENTS.codex.md
copy!("AGENTS.codex.md", Path.join(dest, "AGENTS.codex.md"))
# Copy receiver docs & schemas
src_spec = Path.join([File.cwd!(), "work", "spec_requests"])
File.mkdir_p!(Path.join(dest, "work/spec_requests"))
for name <- [
"README.receivers.md",
"ack.schema.json",
"schema.json",
"ack.example.json",
"message.schema.json"
] do
copy!(Path.join(src_spec, name), Path.join(dest, "work/spec_requests/" <> name))
end
# Copy JSON-LD context into hub schemas/contexts
ctx_src = Path.join(src_spec, "contexts/spec.jsonld")
ctx_dst = Path.join(dest, "schemas/contexts/spec.jsonld")
File.mkdir_p!(Path.dirname(ctx_dst))
copy!(ctx_src, ctx_dst)
Mix.shell().info("Exported handoff docs to #{dest}")
end
defp copy!(src, dst) do
File.mkdir_p!(Path.dirname(dst))
File.cp!(src, dst)
end
end