{
  "report_info": {
    "version": "9.0.1",
    "generated_at": "2026-07-21T01:54:27Z",
    "binary_name": "deps-checker"
  },
  "binary": {
    "name": "deps-checker",
    "path": "/opt/kodachi/dashboard/hooks/deps-checker",
    "timestamp": "2026-07-21T01:54:27Z",
    "file_info": {
      "size": 2978592,
      "sha256": "520722353135c1736ea955de78186d7aea05b60e2386d3e727d79c128046c6f7"
    },
    "flag_n": {
      "command": "info",
      "data": {
        "author": "Warith Al Maawali",
        "copyright": "© 2026 Kodachi OS",
        "description": "Dependency checker for Kodachi OS Rust binaries - Validates system dependencies and generates installation scripts",
        "features": [
          "Multi-profile dependency checking (minimal/full)",
          "Automatic missing package installation",
          "Installation script generation for multiple shells",
          "Software Bill of Materials (SBOM) generation",
          "External dependency database support",
          "Comprehensive JSON output for automation",
          "Strict mode for CI/CD pipelines",
          "Dry-run mode for safe previewing"
        ],
        "license": "Proprietary",
        "name": "deps-checker",
        "securityFeatures": {
          "authentication": "Secure package repository authentication",
          "encryption": "TLS for all package downloads",
          "inputValidation": "All user inputs are validated and sanitized",
          "rateLimiting": "Built-in rate limiting for package operations"
        },
        "systemRequirements": {
          "dependencies": [
            "apt-get",
            "dpkg",
            "curl"
          ],
          "os": "Linux (Debian-based, Kodachi OS)",
          "privileges": "root/sudo required for package installation"
        },
        "version": "9.8.4 (build 320)",
        "website": "https://www.digi77.com"
      },
      "errors": [],
      "metadata": {
        "executionTime": 0,
        "hostname": "REDACTED-BUILD-HOST",
        "user": "REDACTED-BUILD-USER"
      },
      "status": "success",
      "timestamp": "2026-07-21T01:54:27.182470123Z",
      "version": "9.8.4 (build 320)",
      "warnings": []
    },
    "flag_v": {
      "command": "version",
      "data": {
        "buildDate": "REDACTED-BUILD-TIME",
        "gitCommit": "unknown",
        "name": "deps-checker",
        "rustVersion": "rustc 1.97.0 (2d8144b78 2026-07-07)",
        "version": "9.8.4 (build 320)"
      },
      "errors": [],
      "metadata": {
        "executionTime": 0,
        "hostname": "REDACTED-BUILD-HOST",
        "user": "REDACTED-BUILD-USER"
      },
      "status": "success",
      "timestamp": "2026-07-21T01:54:27.318754828Z",
      "version": "9.8.4 (build 320)",
      "warnings": []
    },
    "flag_h": {
      "command": "help",
      "data": {
        "commandCategories": [
          {
            "category": "Dependency Checking",
            "commands": [
              {
                "description": "Check dependencies for a specific binary (read-only, no root needed)",
                "examples": [
                  "deps-checker check dns-switch",
                  "deps-checker check dns-switch --profile minimal",
                  "deps-checker check dns-switch --json",
                  "deps-checker check dns-switch --strict"
                ],
                "name": "check",
                "options": [
                  {
                    "description": "Kodachi binary whose dependency profile should be checked",
                    "flag": "<BINARY>",
                    "required": true
                  },
                  {
                    "default": "full",
                    "description": "Dependency profile to use: minimal or full. Any other value is rejected",
                    "flag": "-p, --profile <NAME>",
                    "required": false
                  },
                  {
                    "description": "Load an external dependency database (JSON) on top of the built-in one",
                    "flag": "--db <PATH>",
                    "required": false
                  },
                  {
                    "default": "false",
                    "description": "Exit 1 on warnings as well as on missing packages. Use this in CI",
                    "flag": "--strict",
                    "required": false
                  },
                  {
                    "default": "false",
                    "description": "Emit a CycloneDX JSON Software Bill of Materials instead of the report",
                    "flag": "--sbom",
                    "required": false
                  },
                  {
                    "description": "Write the report to a file. Relative paths only: the path is resolved inside the execution folder, and an absolute path or one containing '..' is rejected",
                    "flag": "-o, --output <FILE>",
                    "required": false
                  },
                  {
                    "default": "false",
                    "description": "With --json, also save the JSON to an auto-named file under results/",
                    "flag": "--json-save",
                    "required": false
                  },
                  {
                    "description": "With --json, save the JSON under the given relative filename (same containment rules as -o)",
                    "flag": "--json-export <FILE>",
                    "required": false
                  }
                ],
                "requires_sudo": false,
                "usage": "deps-checker check [OPTIONS] <BINARY>"
              },
              {
                "description": "Check dependencies for all 30 known binaries (read-only, no root needed)",
                "examples": [
                  "deps-checker check-all",
                  "deps-checker check-all --json",
                  "deps-checker check-all --sbom --json",
                  "deps-checker check-all --strict --quiet"
                ],
                "name": "check-all",
                "options": [
                  {
                    "default": "full",
                    "description": "Dependency profile to use: minimal or full. Any other value is rejected",
                    "flag": "-p, --profile <NAME>",
                    "required": false
                  },
                  {
                    "default": "false",
                    "description": "Exit 1 on warnings as well as on missing packages. Use this in CI",
                    "flag": "--strict",
                    "required": false
                  },
                  {
                    "default": "false",
                    "description": "Emit a CycloneDX JSON Software Bill of Materials instead of the report",
                    "flag": "--sbom",
                    "required": false
                  },
                  {
                    "description": "Load an external dependency database (JSON) on top of the built-in one",
                    "flag": "--db <PATH>",
                    "required": false
                  },
                  {
                    "description": "Write the report to a file. Relative paths only, resolved inside the execution folder",
                    "flag": "-o, --output <FILE>",
                    "required": false
                  },
                  {
                    "default": "false",
                    "description": "With --json, also save the JSON to an auto-named file under results/",
                    "flag": "--json-save",
                    "required": false
                  },
                  {
                    "description": "With --json, save the JSON under the given relative filename (same containment rules as -o)",
                    "flag": "--json-export <FILE>",
                    "required": false
                  }
                ],
                "requires_sudo": false,
                "usage": "deps-checker check-all [OPTIONS]"
              }
            ]
          },
          {
            "category": "Package Management",
            "commands": [
              {
                "description": "Install the missing dependency packages with apt-get. Omit BINARY and it covers ALL 30 known binaries ('install-missing all' does the same). Debian-family systems only",
                "examples": [
                  "sudo deps-checker install-missing --dry-run",
                  "sudo deps-checker install-missing dns-switch",
                  "sudo deps-checker install-missing all --dry-run"
                ],
                "name": "install-missing",
                "options": [
                  {
                    "default": "all",
                    "description": "Optional Kodachi binary name, or 'all'. When omitted, all known binaries are covered",
                    "flag": "[BINARY|all]",
                    "required": false
                  },
                  {
                    "default": "false",
                    "description": "Print the apt-get command that would run, install nothing. Always do this first when no BINARY is given",
                    "flag": "--dry-run",
                    "required": false
                  },
                  {
                    "default": "full",
                    "description": "Dependency profile to install for: minimal or full",
                    "flag": "-p, --profile <NAME>",
                    "required": false
                  },
                  {
                    "description": "Load an external dependency database (JSON) on top of the built-in one",
                    "flag": "--db <PATH>",
                    "required": false
                  }
                ],
                "requires_sudo": true,
                "usage": "sudo deps-checker install-missing [BINARY|all] [OPTIONS]"
              },
              {
                "description": "Turn a JSON check result into an install script. It reads the JSON from STDIN, so it must be on the right-hand side of a pipe: with no pipe it waits for input forever",
                "examples": [
                  "deps-checker check-all --json | deps-checker generate-script",
                  "deps-checker check-all --json | deps-checker generate-script --shell fish",
                  "deps-checker check-all --json | sudo deps-checker generate-script --execute"
                ],
                "name": "generate-script",
                "options": [
                  {
                    "default": "bash",
                    "description": "Shell syntax to emit: bash, zsh or fish",
                    "flag": "--shell <TYPE>",
                    "required": false
                  },
                  {
                    "default": "false",
                    "description": "Run the generated script instead of printing it. It calls apt-get, so it needs root and it changes the system. Combine with --dry-run to see the script without running it",
                    "flag": "--execute",
                    "required": false
                  },
                  {
                    "default": "false",
                    "description": "Mark the script as a dry run: with --execute it is printed instead of executed",
                    "flag": "--dry-run",
                    "required": false
                  }
                ],
                "requires_sudo": false,
                "usage": "deps-checker check-all --json | deps-checker generate-script [OPTIONS]"
              }
            ]
          },
          {
            "category": "Information",
            "commands": [
              {
                "description": "List all known Kodachi binaries",
                "examples": [
                  "deps-checker list-binaries",
                  "deps-checker list-binaries --json"
                ],
                "name": "list-binaries",
                "options": [],
                "requires_sudo": false,
                "usage": "deps-checker list-binaries"
              },
              {
                "description": "List the dependency profiles available for one binary. BINARY is required",
                "examples": [
                  "deps-checker list-profiles dns-switch",
                  "deps-checker list-profiles dns-switch --json"
                ],
                "name": "list-profiles",
                "options": [
                  {
                    "description": "Kodachi binary whose available dependency profiles should be listed",
                    "flag": "<BINARY>",
                    "required": true
                  }
                ],
                "requires_sudo": false,
                "usage": "deps-checker list-profiles <BINARY>"
              }
            ]
          }
        ],
        "description": "Dependency checker for Kodachi OS Rust binaries",
        "environmentVariables": [
          {
            "default": "unset",
            "description": "Print how each package was resolved (which candidate matched, which fell back) to stderr. Set it when a dependency is reported missing and you do not believe it",
            "name": "DEPS_DEBUG",
            "values": "set to any value to enable"
          }
        ],
        "exitCodes": {
          "0": "All required dependencies satisfied (warnings alone still exit 0 unless --strict is passed)",
          "1": "A required package is missing, a version conflict was found, a warning was found while --strict is set, or the command itself failed (bad binary name, bad profile, rejected output path, non-Debian system for install-missing)"
        },
        "globalOptions": [
          {
            "description": "Print help information",
            "flag": "-h, --help"
          },
          {
            "description": "Print version information",
            "flag": "-v, --version"
          },
          {
            "description": "Display detailed information",
            "flag": "-n, --info"
          },
          {
            "description": "Show usage examples",
            "flag": "-e, --examples"
          },
          {
            "description": "Output in JSON format",
            "flag": "--json"
          },
          {
            "description": "Output in pretty-printed JSON format",
            "flag": "--json-pretty"
          },
          {
            "description": "Output in human-friendly JSON format with colors",
            "flag": "--json-human"
          },
          {
            "description": "Save JSON output to an auto-generated results file",
            "flag": "--json-save"
          },
          {
            "description": "Export JSON output to a specified file",
            "flag": "--json-export <FILE>"
          },
          {
            "description": "Enable verbose output",
            "flag": "--verbose"
          },
          {
            "description": "Suppress non-essential output",
            "flag": "--quiet"
          },
          {
            "description": "Disable colored output",
            "flag": "--no-color"
          },
          {
            "description": "Dependency profile (minimal/full, default: full)",
            "flag": "-p, --profile <NAME>"
          },
          {
            "description": "Shell syntax for generated scripts",
            "flag": "--shell <TYPE>"
          },
          {
            "description": "Write output to a file",
            "flag": "-o, --output <FILE>"
          },
          {
            "description": "Use an external dependency database",
            "flag": "--db <FILE>"
          },
          {
            "description": "Treat warnings as errors",
            "flag": "--strict"
          },
          {
            "description": "Show what would happen without executing",
            "flag": "--dry-run"
          },
          {
            "description": "Execute a generated installation script after confirmation",
            "flag": "--execute"
          },
          {
            "description": "Generate a CycloneDX JSON SBOM",
            "flag": "--sbom"
          }
        ],
        "name": "deps-checker",
        "usage": "deps-checker [OPTIONS] [COMMAND] [ARGS]"
      },
      "errors": [],
      "metadata": {
        "executionTime": 1,
        "hostname": "REDACTED-BUILD-HOST",
        "user": "REDACTED-BUILD-USER"
      },
      "status": "success",
      "timestamp": "2026-07-21T01:54:27.449294051Z",
      "version": "9.8.4 (build 320)",
      "warnings": []
    },
    "flag_e": {
      "command": "examples",
      "data": {
        "categories": [
          {
            "description": "Find out what a binary needs and whether the system has it. Checking is read-only: do not run it with sudo, or the files it writes under results/ end up owned by root and the next non-root run fails on them.",
            "examples": [
              {
                "command": "deps-checker check dns-switch",
                "description": "See which packages dns-switch needs and which are missing",
                "expectedOutput": "A per-package table (package, required version, installed version, OK or MISSING) and a verdict line"
              },
              {
                "command": "deps-checker check dns-switch --profile minimal",
                "description": "Check only the packages dns-switch cannot run without",
                "expectedOutput": "The same table, restricted to the minimal profile",
                "notes": "Only 'minimal' and 'full' exist. Any other profile name is rejected with 'Invalid profile'."
              },
              {
                "command": "deps-checker check-all",
                "description": "Check every one of the 30 known binaries at once",
                "expectedOutput": "One status line per binary plus totals for OK, missing and warning"
              },
              {
                "command": "deps-checker check-all --json -o report.json",
                "description": "Check everything and write the report to a file",
                "expectedOutput": "Nothing on the terminal; report.json is written inside the execution folder",
                "notes": "-o takes a RELATIVE path only. An absolute path, or one containing '..', is rejected: output is confined to the execution folder."
              },
              {
                "command": "deps-checker list-binaries",
                "description": "See the names accepted by check and install-missing",
                "expectedOutput": "The 30 binary names, one per line",
                "notes": "A name outside this list is rejected, so start here if 'Invalid binary name' surprises you."
              }
            ],
            "id": "1_basic",
            "title": "BASIC COMMANDS"
          },
          {
            "description": "Machine-readable JSON output options",
            "examples": [
              {
                "command": "deps-checker check dns-switch --json",
                "description": "Compact JSON output",
                "expectedOutput": "Single-line JSON"
              },
              {
                "command": "deps-checker check dns-switch --json-pretty",
                "description": "Pretty-printed JSON output",
                "expectedOutput": "Indented JSON for readability"
              },
              {
                "command": "deps-checker check dns-switch --json-human",
                "description": "Human-friendly colored JSON output",
                "expectedOutput": "Colored JSON output for terminals"
              },
              {
                "command": "deps-checker check-all --json --json-save",
                "description": "Save JSON output to auto-generated file",
                "expectedOutput": "File saved to results/ directory"
              }
            ],
            "id": "2_json",
            "title": "JSON OUTPUT"
          },
          {
            "description": "generate-script turns a JSON check result into an install script. It ALWAYS reads its input from stdin, so it only makes sense on the right-hand side of a pipe. Run it with no pipe and it sits there waiting for input that never comes.",
            "examples": [
              {
                "command": "deps-checker check-all --json | deps-checker generate-script",
                "description": "Write out a bash script that installs everything currently missing",
                "expectedOutput": "A bash script on stdout (apt-get update, then apt-get install of the missing packages). Nothing is installed"
              },
              {
                "command": "deps-checker check-all --json | deps-checker generate-script --shell fish > install-deps.fish",
                "description": "Emit the script in fish syntax and save it for review",
                "expectedOutput": "install-deps.fish written; nothing runs",
                "notes": "--shell accepts bash (default), zsh and fish. Anything else is rejected."
              },
              {
                "command": "deps-checker check-all --json | deps-checker generate-script --dry-run",
                "description": "Produce the script in dry-run form, so that even running it would only print what it intends to install",
                "expectedOutput": "The script text, marked as a dry run",
                "notes": "generate-script never installs anything on its own. Only --execute does that."
              },
              {
                "command": "deps-checker check-all --json | sudo deps-checker generate-script --execute",
                "description": "Generate the install script and immediately run it",
                "expectedOutput": "apt-get output as the missing packages are installed",
                "notes": "CHANGES THE SYSTEM. This runs apt-get as root and installs packages. Preview it first with the same pipeline minus --execute, and pass --execute --dry-run if you want it to print the script instead of running it."
              }
            ],
            "id": "3_script",
            "title": "SCRIPT GENERATION"
          },
          {
            "description": "List known binaries and available dependency profiles",
            "examples": [
              {
                "command": "deps-checker list-binaries",
                "description": "List all known Kodachi binaries",
                "expectedOutput": "Names of every binary deps-checker can check"
              },
              {
                "command": "deps-checker list-binaries --json",
                "description": "List all known Kodachi binaries as JSON",
                "expectedOutput": "Machine-readable array of binary names"
              },
              {
                "command": "deps-checker list-profiles dns-switch",
                "description": "List available dependency profiles for a binary",
                "expectedOutput": "Shows profiles such as minimal and full",
                "notes": "Requires a binary name argument"
              },
              {
                "command": "deps-checker list-profiles dns-switch --json",
                "description": "List dependency profiles for a binary as JSON",
                "expectedOutput": "Machine-readable profiles for the given binary"
              }
            ],
            "id": "4_information",
            "title": "INFORMATION"
          },
          {
            "description": "install-missing is the only command here that changes the system. It runs apt-get, so it needs root and it only works on Debian-family distributions. Everything else in this tool is read-only.",
            "examples": [
              {
                "command": "sudo deps-checker install-missing --dry-run",
                "description": "See exactly what a full install would do, before doing it",
                "expectedOutput": "The planned command, for example: apt-get update && apt-get install -y <packages>. Nothing is installed",
                "notes": "With no BINARY, install-missing covers ALL 30 binaries, which is the widest thing this tool can do. Always dry-run this form first."
              },
              {
                "command": "sudo deps-checker install-missing dns-leak",
                "description": "Install only the packages that dns-leak is missing",
                "expectedOutput": "apt-get installs the missing packages for dns-leak, then a summary",
                "notes": "CHANGES THE SYSTEM: installs Debian packages as root."
              },
              {
                "command": "sudo deps-checker install-missing all --dry-run",
                "description": "Same as install-missing with no binary name: 'all' is an accepted alias for every known binary",
                "expectedOutput": "The planned apt-get command covering the union of all missing packages"
              },
              {
                "command": "sudo deps-checker install-missing dns-switch --profile minimal",
                "description": "Install only what dns-switch strictly needs, skipping optional packages",
                "expectedOutput": "A shorter package list than the default full profile",
                "notes": "CHANGES THE SYSTEM. Drop --profile and you get the full set."
              }
            ],
            "id": "5_installing",
            "title": "INSTALLING MISSING PACKAGES"
          },
          {
            "description": "Exit codes and machine-readable artifacts. deps-checker exits 1 when a required package is missing; add --strict and it also exits 1 on warnings, which is usually what a pipeline wants.",
            "examples": [
              {
                "command": "deps-checker check-all --strict --quiet",
                "description": "Fail a build on missing packages AND on warnings",
                "expectedOutput": "No output on success (exit 0); exit 1 if anything is missing or any warning was raised",
                "notes": "Without --strict, warnings still exit 0. That difference is the whole point of the flag."
              },
              {
                "command": "deps-checker check-all --sbom --json --json-export sbom.json",
                "description": "Produce a CycloneDX Software Bill of Materials for every binary and keep it",
                "expectedOutput": "CycloneDX JSON on stdout and in sbom.json inside the execution folder",
                "notes": "--json-export takes a relative filename only, resolved inside the execution folder (absolute paths and '..' are rejected). --json-save does the same with an auto-generated name under results/."
              },
              {
                "command": "deps-checker check dns-switch --db custom-deps.json --json",
                "description": "Check against an external dependency database layered on top of the built-in one",
                "expectedOutput": "The usual JSON report, resolved using the extra package definitions from custom-deps.json"
              },
              {
                "command": "DEPS_DEBUG=1 deps-checker check dns-switch",
                "description": "Show how each package was resolved when a result looks wrong",
                "expectedOutput": "The normal report, plus resolution tracing on stderr (which candidate matched, which fallback was used)"
              }
            ],
            "id": "6_ci_automation",
            "title": "CI AND AUTOMATION"
          }
        ],
        "description": "Dependency checker for Kodachi OS Rust binaries",
        "name": "deps-checker",
        "quickReference": [
          "deps-checker -h",
          "deps-checker -e",
          "deps-checker list-binaries",
          "deps-checker check dns-switch",
          "deps-checker check-all --json",
          "deps-checker list-profiles dns-switch",
          "sudo deps-checker install-missing --dry-run",
          "deps-checker check-all --json | deps-checker generate-script"
        ]
      },
      "errors": [],
      "metadata": {
        "executionTime": 0,
        "hostname": "REDACTED-BUILD-HOST",
        "user": "REDACTED-BUILD-USER"
      },
      "status": "success",
      "timestamp": "2026-07-21T01:54:27.694469381Z",
      "version": "9.8.4 (build 320)",
      "warnings": []
    }
  }
}
