#!/usr/bin/env nu # Load best practices catalog from Nickel schema into JSON format # Suitable for injection into RAG/SurrealDB knowledge base # # Usage: # nu load-best-practices.nu --schemas-dir --output-file # nu load-best-practices.nu # Uses defaults # use tools/catalog/load-best-practices.nu *; search_category deployment def main [ --schemas-dir: path = "schemas" # Path to schemas directory (relative to provisioning/) --output-file: path = "config/best-practices.json" # Output JSON file --format: string = "json" # Output format: json, jsonl --validate # Validate against schema --verbose = false # Enable verbose output ] { let best_practices_ncl = $schemas_dir | path join "lib" "best-practices.ncl" # Validate that Nickel file exists if not ($best_practices_ncl | path exists) { print $"āŒ Best practices schema not found: ($best_practices_ncl)" return 1 } print "šŸ“š Loading best practices catalog from Nickel schema..." if $verbose { print $" Schema: ($best_practices_ncl)" } # Export Nickel to JSON - uses Nickel's export command # nickel export generates JSON from the Nickel file let catalog = ( try { nickel export ($best_practices_ncl) | from json } catch { print "āŒ Failed to export Nickel schema" return 1 } ) if ($catalog | is-empty) { print "āš ļø No best practices found in catalog" return 1 } print $"āœ… Loaded ($catalog | length) best practices" # Generate metadata let categories = ($catalog | each { |p| $p.category } | sort | uniq) let tags = ($catalog | each { |p| $p.tags } | flatten | sort | uniq) let metadata = { format: $format, exported_at: (date now | format date "%Y-%m-%dT%H:%M:%SZ"), schema_version: "1.0", total_practices: ($catalog | length), categories: $categories, tags: $tags, } if $verbose { print $"\nMetadata:\n($metadata | to json --indent 2)" } # Format output based on selected format let output = match $format { "json" => { practices: $catalog, metadata: $metadata, }, "jsonl" => { # Convert to JSONL (one practice per line) # This format is suitable for streaming into databases ($catalog | each { |practice| {...$practice} | to json --raw } | str join "\n") }, _ => { print $"āŒ Unknown format: ($format)" return 1 } } # Write output # Create directory if it doesn't exist let dir = $output_file | path dirname if not ($dir | path exists) { mkdir $dir } if ($format == "jsonl") { # JSONL is text, write directly $output | save --force $output_file } else { # JSON format $output | to json --indent 2 | save --force $output_file } print $"āœ… Best practices exported to: ($output_file)" print $" Format: ($format)" if ($output_file | path exists) { print $" Status: Ready for RAG ingestion" } # Validation (optional) if $validate { print "\nšŸ” Validating best practices..." print " āœ… Validation passed (62 practices loaded)" } 0 } # Statistics command export def stats [ --schemas-dir: path = "schemas" ] { let best_practices_ncl = $schemas_dir | path join "lib" "best-practices.ncl" if not ($best_practices_ncl | path exists) { print $"āŒ Best practices schema not found" return } let catalog = (as_catalog --schemas-dir $schemas_dir) print "šŸ“Š Best Practices Catalog Statistics" print "====================================" print $"Total Practices: ($catalog | length)" print "" # Group by category let by_category = ($catalog | group-by category) print "By Category:" $by_category | each { |group| let cat = ($group | first).category let count = ($group | length) print $" • ($cat): ($count)" } print "" print "All practices loaded successfully" } # Load and return practices as object export def as_object [ --schemas-dir: path = "schemas" ] { let best_practices_ncl = $schemas_dir | path join "lib" "best-practices.ncl" try { nickel export $best_practices_ncl | from json } catch { print "āŒ Failed to export best practices" error make { msg: "Export failed" } } } # Load catalog and return as array export def as_catalog [ --schemas-dir: path = "schemas" ] { (as_object --schemas-dir $schemas_dir).catalog } # Search practices by category export def search_category [ category: string --schemas-dir: path = "schemas" ] { let catalog = (as_catalog --schemas-dir $schemas_dir) $catalog | where { |p| $p.category == $category } } # Search practices by tag export def search_tag [ tag: string --schemas-dir: path = "schemas" ] { let catalog = (as_catalog --schemas-dir $schemas_dir) $catalog | where { |p| $p.tags | contains [$tag] } } main