5df938805e
Wraps the body-building core in a public aggregate_directives() function that returns the rendered string and raises FileNotFoundError/ValueError on errors. The existing aggregate() CLI wrapper catches those and preserves the prior stdout/file output behavior. parse_preset now accepts an optional root param so directive paths inside the preset resolve against a caller-supplied project_root instead of always REPO_ROOT. No behavior change for the CLI; the new function is the API surface used by the upcoming MCP server tool.