pub fn save(opencode_dir: &Path, manifest: &Manifest) -> Result<(), CliError>
Saves the manifest to .opencode/.manifest.json with 2-space pretty-print and trailing newline.