defmodule OrgGarden.Supervisor do @moduledoc """ Supervises development server components. Strategy: :one_for_all If either child fails, restart both to ensure consistent state. Children: 1. OrgGarden.Watcher - watches .org files for changes 2. OrgGarden.Quartz - runs Quartz Node.js server ## Usage OrgGarden.Supervisor.start_link( notes_dir: "/path/to/notes", output_dir: "/path/to/output", content_dir: "/path/to/output/content", pipeline_opts: %{zotero_url: "...", ...}, transforms: [OrgGarden.Transforms.Citations], port: 8080, ws_port: 3001 ) """ use Supervisor def start_link(opts) do Supervisor.start_link(__MODULE__, opts, name: __MODULE__) end @impl true def init(opts) do children = [ {OrgGarden.Watcher, Keyword.take(opts, [:notes_dir, :output_dir, :content_dir, :pipeline_opts, :transforms])}, {OrgGarden.Quartz, Keyword.take(opts, [:content_dir, :port, :ws_port])} ] Supervisor.init(children, strategy: :one_for_all) end end