changelog generator & diff tool stormlightlabs.github.io/git-storm/
changelog changeset markdown golang git
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

initial commit

Owais Jamil b1c3092c

+663
+32
.gitignore
··· 1 + # If you prefer the allow list template instead of the deny list, see community template: 2 + # https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore 3 + # 4 + # Binaries for programs and plugins 5 + *.exe 6 + *.exe~ 7 + *.dll 8 + *.so 9 + *.dylib 10 + 11 + # Test binary, built with `go test -c` 12 + *.test 13 + 14 + # Code coverage profiles and other test artifacts 15 + *.out 16 + coverage.* 17 + *.coverprofile 18 + profile.cov 19 + 20 + # Dependency directories (remove the comment below to include it) 21 + # vendor/ 22 + 23 + # Go workspace file 24 + go.work 25 + go.work.sum 26 + 27 + # env file 28 + .env 29 + 30 + # Editor/IDE 31 + # .idea/ 32 + # .vscode/
+259
PROJECT.md
··· 1 + # `storm` — Project Guide 2 + 3 + > Internal operations and release workflow 4 + 5 + This document outlines: 6 + 7 + - The release lifecycle 8 + - CLI integration into development workflows 9 + - Distribution setup for major package managers 10 + 11 + ## Lifecycle 12 + 13 + ### Local Development 14 + 15 + - Edit and test locally: 16 + 17 + ```bash 18 + go run ./cmd/storm unreleased add --type fixed --summary "Fix diff rendering" 19 + go run ./cmd/storm unreleased list 20 + go run ./cmd/storm unreleased review 21 + ``` 22 + 23 + - Each `.changes/*.md` entry represents one meaningful change. 24 + 25 + ### 2. Preparing a Release 26 + 27 + 1. **Generate and review** 28 + 29 + ```bash 30 + storm generate v1.2.0 HEAD --interactive 31 + ``` 32 + 33 + - Opens a Bubble Tea UI for categorization. 34 + - Outputs candidate `.changes/` files if confirmed. 35 + 36 + 2. **Verify unreleased notes** 37 + 38 + ```bash 39 + storm unreleased list 40 + ``` 41 + 42 + 3. **Promote to changelog** 43 + 44 + ```bash 45 + storm release --version 1.3.0 46 + ``` 47 + 48 + This: 49 + 50 + - Merges `.changes/*.md` into `CHANGELOG.md` 51 + - Inserts the date 52 + - Clears `.changes/` 53 + - (Optional) creates an annotated Git tag 54 + 55 + 4. **Commit and tag** 56 + 57 + ```bash 58 + git add CHANGELOG.md 59 + git commit -m "Release 1.3.0" 60 + git tag -a v1.3.0 -m "Release 1.3.0" 61 + ``` 62 + 63 + ### Validation 64 + 65 + Before pushing: 66 + 67 + ```bash 68 + go test ./... 69 + go run ./cmd/storm release --dry-run 70 + ``` 71 + 72 + Once satisfied: 73 + 74 + ```bash 75 + git push origin main --tags 76 + ``` 77 + 78 + ## CLI Integration in Workflows 79 + 80 + `storm` is meant to sit between `git log` and `CHANGELOG.md`. 81 + Use it at the end of development cycles or integrate it into CI pipelines. 82 + 83 + ### Example integrations 84 + 85 + #### Local Workflow 86 + 87 + - Add a new `.changes` file per PR or major commit. 88 + - Review unreleased entries before each merge to `main`. 89 + - Run `storm release` when preparing a new version. 90 + 91 + #### Automated Release Job (CI) 92 + 93 + Example pseudo-pipeline (GitHub Actions / Drone / Woodpecker): 94 + 95 + ```yaml 96 + steps: 97 + - name: Generate changelog 98 + run: | 99 + go install ./cmd/storm 100 + storm release --version ${{ steps.bump.outputs.version }} 101 + - name: Tag and push 102 + run: | 103 + git add CHANGELOG.md 104 + git commit -m "Release ${{ steps.bump.outputs.version }}" 105 + git tag -a v${{ steps.bump.outputs.version }} -m "Release ${{ steps.bump.outputs.version }}" 106 + git push origin main --tags 107 + ``` 108 + 109 + #### Integration with other tools 110 + 111 + - **Taskfile / Justfile:** add `release` recipe calling `storm release`. 112 + - **GoReleaser:** run `storm release` in `before.hooks`. 113 + - **Custom TUI tools:** embed `internal/changeset` and `changelog` packages directly. 114 + 115 + ## Packaging & Distribution 116 + 117 + ### Homebrew (macOS / Linux) 118 + 119 + #### Create a tap repo 120 + 121 + Make a repo: `github.com/stormlightlabs/homebrew-tools`. 122 + 123 + #### Formula template (`storm.rb`) 124 + 125 + ```ruby 126 + class Gostorm < Formula 127 + desc "Git-aware changelog manager with TUI review" 128 + homepage "https://github.com/stormlightlabs/storm" 129 + version "1.3.0" 130 + url "https://github.com/stormlightlabs/storm/archive/refs/tags/v1.3.0.tar.gz" 131 + sha256 "<insert_sha256_here>" 132 + license "MIT" 133 + 134 + depends_on "go" => :build 135 + 136 + def install 137 + system "go", "build", *std_go_args, "./cmd/storm" 138 + end 139 + 140 + test do 141 + system "#{bin}/storm", "--help" 142 + end 143 + end 144 + ``` 145 + 146 + #### Update formula on each release 147 + 148 + Automate with `goreleaser`: 149 + 150 + ```yaml 151 + brews: 152 + - tap: stormlightlabs/homebrew-tools 153 + name: storm 154 + folder: Formula 155 + commit_author: 156 + name: Owais Jamil 157 + email: owais@example.com 158 + ``` 159 + 160 + ### Chocolatey (Windows) 161 + 162 + #### Create package skeleton 163 + 164 + ```sh 165 + tools/ 166 + chocolateyinstall.ps1 167 + VERIFICATION.txt 168 + storm.nuspec 169 + ``` 170 + 171 + #### `chocolateyinstall.ps1` 172 + 173 + ```powershell 174 + $ErrorActionPreference = 'Stop' 175 + $toolsDir = "$(Split-Path -Parent $MyInvocation.MyCommand.Definition)" 176 + $url = 'https://github.com/stormlightlabs/storm/releases/download/v1.3.0/storm_1.3.0_windows_amd64.zip' 177 + 178 + Install-ChocolateyZipPackage 'storm' $url $toolsDir 179 + ``` 180 + 181 + #### `.nuspec` 182 + 183 + ```xml 184 + <package> 185 + <metadata> 186 + <id>storm</id> 187 + <version>1.3.0</version> 188 + <authors>Owais Jamil</authors> 189 + <description>Git-aware changelog manager with TUI review</description> 190 + <licenseUrl>https://opensource.org/licenses/MIT</licenseUrl> 191 + <projectUrl>https://github.com/stormlightlabs/storm</projectUrl> 192 + </metadata> 193 + </package> 194 + ``` 195 + 196 + #### Build & push 197 + 198 + ```bash 199 + choco pack 200 + choco push storm.1.3.0.nupkg --source https://push.chocolatey.org/ 201 + ``` 202 + 203 + ### AUR 204 + 205 + #### Create PKGBUILD 206 + 207 + ```bash 208 + pkgname=storm 209 + pkgver=1.3.0 210 + pkgrel=1 211 + pkgdesc="Git-aware changelog manager with TUI review" 212 + arch=('x86_64') 213 + url="https://github.com/stormlightlabs/storm" 214 + license=('MIT') 215 + depends=('git' 'go') 216 + source=("$url/archive/refs/tags/v${pkgver}.tar.gz") 217 + sha256sums=('SKIP') 218 + 219 + build() { 220 + cd "$srcdir/storm-$pkgver" 221 + go build -o storm ./cmd/storm 222 + } 223 + 224 + package() { 225 + install -Dm755 storm "$pkgdir/usr/bin/storm" 226 + } 227 + ``` 228 + 229 + #### Submit 230 + 231 + Clone AUR repo: 232 + 233 + ```bash 234 + git clone ssh://aur@aur.archlinux.org/storm.git 235 + cp PKGBUILD storm/ 236 + cd storm 237 + makepkg --printsrcinfo > .SRCINFO 238 + git add . 239 + git commit -m "Add storm v1.3.0" 240 + git push 241 + ``` 242 + 243 + ## Summary 244 + 245 + | Step | Action | Output | 246 + | ---- | ---------------------------------------------- | --------------------------- | 247 + | 1 | `storm generate v1.2.0 HEAD --interactive` | Draft unreleased notes | 248 + | 2 | `storm release --version 1.3.0` | Updated `CHANGELOG.md` | 249 + | 3 | `git tag -a v1.3.0` | Annotated release tag | 250 + | 4 | `goreleaser release --clean` | Builds + publishes binaries | 251 + | 5 | Update tap / choco / AUR formulas | Public distribution | 252 + 253 + ## Maintenance Notes 254 + 255 + - Keep `.changes/` entries atomic and descriptive. 256 + - Avoid retroactive changelog edits outside releases. 257 + - Tag every release in Git with an exact semantic version (`vX.Y.Z`). 258 + - Ensure TUI remains optional (disable automatically in CI). 259 + - Treat changelog generation as a testable unit — not a side effect.
+117
README.md
··· 1 + # `storm` 2 + 3 + > A Go-based changelog manager built for clarity, speed, and interaction. 4 + 5 + ## Goals 6 + 7 + - Use Git as a data source, not a dependency. 8 + - Store unreleased notes locally (`.changes/*.md`) in a simple, editable format. 9 + - Provide a terminal UI for reviewing commits and changes interactively. 10 + - Generate Markdown in strict [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) format. 11 + 12 + ## Design Overview 13 + 14 + ### Core Packages 15 + 16 + ```sh 17 + . 18 + ├── cmd 19 + ├── internal 20 + │ ├── gitlog # Parse and structure commit history via `go-git` 21 + │ ├── diff # Minimal line diff for display and review 22 + │ ├── changeset # Manage `.changes/*.md` files 23 + │ ├── changelog # Build and update `CHANGELOG.md` sections 24 + │ ├── tui # Bubble Tea–based interactive interface 25 + │ └── style # Centralized Lip Gloss palette and formatting 26 + ├── PROJECT.md 27 + └── README.md 28 + ``` 29 + 30 + ## Command Model 31 + 32 + ### Unreleased Changes 33 + 34 + ```sh 35 + storm unreleased add --type added --scope cli --summary "Add changelog command" 36 + storm unreleased list 37 + storm unreleased review 38 + ``` 39 + 40 + Adds or reviews pending `.changes/*.md` entries. 41 + 42 + ### Generate From Git 43 + 44 + ```sh 45 + storm generate <from> <to> [--interactive] 46 + ``` 47 + 48 + Pulls commits between refs, categorizes them by prefix, and optionally opens an interactive review. 49 + 50 + ### Release 51 + 52 + ```sh 53 + storm release --version 1.3.0 [--tag] 54 + ``` 55 + 56 + Merges `.changes/*.md` into the changelog, writes a new section, and optionally tags the repository. 57 + 58 + ## Architecture 59 + 60 + - **Git integration:** Uses `go-git` for commit history and tag resolution — no shell calls. 61 + - **Diffing:** Custom lightweight diff engine for readable line-by-line output. 62 + - **Unreleased storage:** Simple Markdown files with YAML frontmatter (no external formats). 63 + - **Interactive mode:** Bubble Tea model for categorizing and confirming changes. 64 + - **Output:** Always produces Keep a Changelog–compliant Markdown. 65 + 66 + ## Development Guidance 67 + 68 + 1. Composable 69 + Each subsystem (`diff`, `gitlog`, `tui`, etc.) should work standalone and be callable from tests or other Go programs. 70 + 2. Frontmatter 71 + 72 + ```yaml 73 + type: added 74 + scope: cli 75 + summary: Add changelog command 76 + ``` 77 + 78 + 3. Consistent Palette 79 + 80 + | Type | Color | 81 + | -------- | --------- | 82 + | Added | `#10b981` | 83 + | Changed | `#0ea5e9` | 84 + | Fixed | `#f43f5e` | 85 + | Removed | `#f59e0b` | 86 + | Security | `#9333ea` | 87 + 88 + 4. Commands should chain naturally and script cleanly: 89 + 90 + ```sh 91 + storm unreleased list --json 92 + storm generate --since v1.2.0 --interactive 93 + storm release --version 1.3.0 94 + ``` 95 + 96 + 5. Tests 97 + - Research testing bubbletea programs 98 + - Use golden files for diff/changelog output. 99 + - Use in-memory `go-git` repos in unit tests. 100 + 101 + ## Roadmap 102 + 103 + | Phase | Deliverable | 104 + | ----- | ---------------------------------------------- | 105 + | 1 | Core CLI (`generate`, `unreleased`, `release`) | 106 + | 2 | Git integration and commit parsing | 107 + | 3 | Diff engine and styling | 108 + | 4 | `.changes` storage and parsing | 109 + | 5 | Interactive TUI | 110 + | 6 | Keep a Changelog writer | 111 + | 7 | Git tagging and CI integration | 112 + 113 + ## Notes 114 + 115 + - No external dependencies beyond `cobra`, `go-git`, `bubbletea`, `lipgloss`, and `yaml.v3`. 116 + - Keep the workflow simple and reproducible so changelogs can be deterministically derived from local data. 117 + - Make sure interactive sessions degrade gracefully in non-TTY environments.
+67
go.mod
··· 1 + module github.com/stormlightlabs/storm 2 + 3 + go 1.24.5 4 + 5 + require ( 6 + github.com/alecthomas/chroma/v2 v2.14.0 // indirect 7 + github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect 8 + github.com/aymerick/douceur v0.2.0 // indirect 9 + github.com/charmbracelet/bubbles v0.21.0 // indirect 10 + github.com/charmbracelet/bubbletea v1.3.10 // indirect 11 + github.com/charmbracelet/colorprofile v0.3.2 // indirect 12 + github.com/charmbracelet/fang v0.4.3 // indirect 13 + github.com/charmbracelet/glamour v0.10.0 // indirect 14 + github.com/charmbracelet/lipgloss v1.1.1-0.20250404203927-76690c660834 // indirect 15 + github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.3.0.20250917201909-41ff0bf215ea // indirect 16 + github.com/charmbracelet/log v0.4.2 // indirect 17 + github.com/charmbracelet/ultraviolet v0.0.0-20250915111650-81d4262876ef // indirect 18 + github.com/charmbracelet/x/ansi v0.10.1 // indirect 19 + github.com/charmbracelet/x/cellbuf v0.0.13 // indirect 20 + github.com/charmbracelet/x/exp/charmtone v0.0.0-20250603201427-c31516f43444 // indirect 21 + github.com/charmbracelet/x/exp/slice v0.0.0-20250327172914-2fdc97757edf // indirect 22 + github.com/charmbracelet/x/term v0.2.1 // indirect 23 + github.com/charmbracelet/x/termios v0.1.1 // indirect 24 + github.com/charmbracelet/x/windows v0.2.2 // indirect 25 + github.com/dlclark/regexp2 v1.11.0 // indirect 26 + github.com/emirpasic/gods v1.12.0 // indirect 27 + github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect 28 + github.com/go-git/go-git v4.7.0+incompatible // indirect 29 + github.com/go-logfmt/logfmt v0.6.0 // indirect 30 + github.com/gorilla/css v1.0.1 // indirect 31 + github.com/inconshreveable/mousetrap v1.1.0 // indirect 32 + github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect 33 + github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd // indirect 34 + github.com/lucasb-eyer/go-colorful v1.3.0 // indirect 35 + github.com/mattn/go-isatty v0.0.20 // indirect 36 + github.com/mattn/go-localereader v0.0.1 // indirect 37 + github.com/mattn/go-runewidth v0.0.16 // indirect 38 + github.com/microcosm-cc/bluemonday v1.0.27 // indirect 39 + github.com/mitchellh/go-homedir v1.1.0 // indirect 40 + github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect 41 + github.com/muesli/cancelreader v0.2.2 // indirect 42 + github.com/muesli/mango v0.1.0 // indirect 43 + github.com/muesli/mango-cobra v1.2.0 // indirect 44 + github.com/muesli/mango-pflag v0.1.0 // indirect 45 + github.com/muesli/reflow v0.3.0 // indirect 46 + github.com/muesli/roff v0.1.0 // indirect 47 + github.com/muesli/termenv v0.16.0 // indirect 48 + github.com/rivo/uniseg v0.4.7 // indirect 49 + github.com/sergi/go-diff v1.4.0 // indirect 50 + github.com/spf13/cobra v1.9.1 // indirect 51 + github.com/spf13/pflag v1.0.6 // indirect 52 + github.com/src-d/gcfg v1.4.0 // indirect 53 + github.com/xanzy/ssh-agent v0.2.1 // indirect 54 + github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect 55 + github.com/yuin/goldmark v1.7.8 // indirect 56 + github.com/yuin/goldmark-emoji v1.0.5 // indirect 57 + golang.org/x/crypto v0.31.0 // indirect 58 + golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect 59 + golang.org/x/net v0.33.0 // indirect 60 + golang.org/x/sync v0.17.0 // indirect 61 + golang.org/x/sys v0.36.0 // indirect 62 + golang.org/x/term v0.31.0 // indirect 63 + golang.org/x/text v0.24.0 // indirect 64 + gopkg.in/src-d/go-billy.v4 v4.3.2 // indirect 65 + gopkg.in/src-d/go-git.v4 v4.13.1 // indirect 66 + gopkg.in/warnings.v0 v0.1.2 // indirect 67 + )
+188
go.sum
··· 1 + github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= 2 + github.com/alecthomas/chroma/v2 v2.14.0 h1:R3+wzpnUArGcQz7fCETQBzO5n9IMNi13iIs46aU4V9E= 3 + github.com/alecthomas/chroma/v2 v2.14.0/go.mod h1:QolEbTfmUHIMVpBqxeDnNBj2uoeI4EbYP4i6n68SG4I= 4 + github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= 5 + github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= 6 + github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= 7 + github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= 8 + github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk= 9 + github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= 10 + github.com/charmbracelet/bubbles v0.21.0 h1:9TdC97SdRVg/1aaXNVWfFH3nnLAwOXr8Fn6u6mfQdFs= 11 + github.com/charmbracelet/bubbles v0.21.0/go.mod h1:HF+v6QUR4HkEpz62dx7ym2xc71/KBHg+zKwJtMw+qtg= 12 + github.com/charmbracelet/bubbletea v1.3.10 h1:otUDHWMMzQSB0Pkc87rm691KZ3SWa4KUlvF9nRvCICw= 13 + github.com/charmbracelet/bubbletea v1.3.10/go.mod h1:ORQfo0fk8U+po9VaNvnV95UPWA1BitP1E0N6xJPlHr4= 14 + github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc h1:4pZI35227imm7yK2bGPcfpFEmuY1gc2YSTShr4iJBfs= 15 + github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc/go.mod h1:X4/0JoqgTIPSFcRA/P6INZzIuyqdFY5rm8tb41s9okk= 16 + github.com/charmbracelet/colorprofile v0.3.2 h1:9J27WdztfJQVAQKX2WOlSSRB+5gaKqqITmrvb1uTIiI= 17 + github.com/charmbracelet/colorprofile v0.3.2/go.mod h1:mTD5XzNeWHj8oqHb+S1bssQb7vIHbepiebQ2kPKVKbI= 18 + github.com/charmbracelet/fang v0.4.3 h1:qXeMxnL4H6mSKBUhDefHu8NfikFbP/MBNTfqTrXvzmY= 19 + github.com/charmbracelet/fang v0.4.3/go.mod h1:wHJKQYO5ReYsxx+yZl+skDtrlKO/4LLEQ6EXsdHhRhg= 20 + github.com/charmbracelet/glamour v0.10.0 h1:MtZvfwsYCx8jEPFJm3rIBFIMZUfUJ765oX8V6kXldcY= 21 + github.com/charmbracelet/glamour v0.10.0/go.mod h1:f+uf+I/ChNmqo087elLnVdCiVgjSKWuXa/l6NU2ndYk= 22 + github.com/charmbracelet/lipgloss v1.1.0 h1:vYXsiLHVkK7fp74RkV7b2kq9+zDLoEU4MZoFqR/noCY= 23 + github.com/charmbracelet/lipgloss v1.1.0/go.mod h1:/6Q8FR2o+kj8rz4Dq0zQc3vYf7X+B0binUUBwA0aL30= 24 + github.com/charmbracelet/lipgloss v1.1.1-0.20250404203927-76690c660834 h1:ZR7e0ro+SZZiIZD7msJyA+NjkCNNavuiPBLgerbOziE= 25 + github.com/charmbracelet/lipgloss v1.1.1-0.20250404203927-76690c660834/go.mod h1:aKC/t2arECF6rNOnaKaVU6y4t4ZeHQzqfxedE/VkVhA= 26 + github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.3.0.20250917201909-41ff0bf215ea h1:g1HfUgSMvye8mgecMD1mPscpt+pzJoDEiSA+p2QXzdQ= 27 + github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.3.0.20250917201909-41ff0bf215ea/go.mod h1:ngHerf1JLJXBrDXdphn5gFrBPriCL437uwukd5c93pM= 28 + github.com/charmbracelet/log v0.4.2 h1:hYt8Qj6a8yLnvR+h7MwsJv/XvmBJXiueUcI3cIxsyig= 29 + github.com/charmbracelet/log v0.4.2/go.mod h1:qifHGX/tc7eluv2R6pWIpyHDDrrb/AG71Pf2ysQu5nw= 30 + github.com/charmbracelet/ultraviolet v0.0.0-20250915111650-81d4262876ef h1:VrWaUi2LXYLjfjCHowdSOEc6dQ9Ro14KY7Bw4IWd19M= 31 + github.com/charmbracelet/ultraviolet v0.0.0-20250915111650-81d4262876ef/go.mod h1:AThRsQH1t+dfyOKIwXRoJBniYFQUkUpQq4paheHMc2o= 32 + github.com/charmbracelet/x/ansi v0.8.0 h1:9GTq3xq9caJW8ZrBTe0LIe2fvfLR/bYXKTx2llXn7xE= 33 + github.com/charmbracelet/x/ansi v0.8.0/go.mod h1:wdYl/ONOLHLIVmQaxbIYEC/cRKOQyjTkowiI4blgS9Q= 34 + github.com/charmbracelet/x/ansi v0.10.1 h1:rL3Koar5XvX0pHGfovN03f5cxLbCF2YvLeyz7D2jVDQ= 35 + github.com/charmbracelet/x/ansi v0.10.1/go.mod h1:3RQDQ6lDnROptfpWuUVIUG64bD2g2BgntdxH0Ya5TeE= 36 + github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd h1:vy0GVL4jeHEwG5YOXDmi86oYw2yuYUGqz6a8sLwg0X8= 37 + github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd/go.mod h1:xe0nKWGd3eJgtqZRaN9RjMtK7xUYchjzPr7q6kcvCCs= 38 + github.com/charmbracelet/x/cellbuf v0.0.13 h1:/KBBKHuVRbq1lYx5BzEHBAFBP8VcQzJejZ/IA3iR28k= 39 + github.com/charmbracelet/x/cellbuf v0.0.13/go.mod h1:xe0nKWGd3eJgtqZRaN9RjMtK7xUYchjzPr7q6kcvCCs= 40 + github.com/charmbracelet/x/exp/charmtone v0.0.0-20250603201427-c31516f43444 h1:IJDiTgVE56gkAGfq0lBEloWgkXMk4hl/bmuPoicI4R0= 41 + github.com/charmbracelet/x/exp/charmtone v0.0.0-20250603201427-c31516f43444/go.mod h1:T9jr8CzFpjhFVHjNjKwbAD7KwBNyFnj2pntAO7F2zw0= 42 + github.com/charmbracelet/x/exp/slice v0.0.0-20250327172914-2fdc97757edf h1:rLG0Yb6MQSDKdB52aGX55JT1oi0P0Kuaj7wi1bLUpnI= 43 + github.com/charmbracelet/x/exp/slice v0.0.0-20250327172914-2fdc97757edf/go.mod h1:B3UgsnsBZS/eX42BlaNiJkD1pPOUa+oF1IYC6Yd2CEU= 44 + github.com/charmbracelet/x/term v0.2.1 h1:AQeHeLZ1OqSXhrAWpYUtZyX1T3zVxfpZuEQMIQaGIAQ= 45 + github.com/charmbracelet/x/term v0.2.1/go.mod h1:oQ4enTYFV7QN4m0i9mzHrViD7TQKvNEEkHUMCmsxdUg= 46 + github.com/charmbracelet/x/termios v0.1.1 h1:o3Q2bT8eqzGnGPOYheoYS8eEleT5ZVNYNy8JawjaNZY= 47 + github.com/charmbracelet/x/termios v0.1.1/go.mod h1:rB7fnv1TgOPOyyKRJ9o+AsTU/vK5WHJ2ivHeut/Pcwo= 48 + github.com/charmbracelet/x/windows v0.2.2 h1:IofanmuvaxnKHuV04sC0eBy/smG6kIKrWG2/jYn2GuM= 49 + github.com/charmbracelet/x/windows v0.2.2/go.mod h1:/8XtdKZzedat74NQFn0NGlGL4soHB0YQZrETF96h75k= 50 + github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= 51 + github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= 52 + github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 53 + github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 54 + github.com/dlclark/regexp2 v1.11.0 h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxKI= 55 + github.com/dlclark/regexp2 v1.11.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= 56 + github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg= 57 + github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= 58 + github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f h1:Y/CXytFA4m6baUTXGLOoWe4PQhGxaX0KpnayAqC48p4= 59 + github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f/go.mod h1:vw97MGsxSvLiUE2X8qFplwetxpGLQrlU1Q9AUEIzCaM= 60 + github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= 61 + github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= 62 + github.com/go-git/go-git v4.7.0+incompatible h1:+W9rgGY4DOKKdX2x6HxSR7HNeTxqiKrOvKnuittYVdA= 63 + github.com/go-git/go-git v4.7.0+incompatible/go.mod h1:6+421e08gnZWn30y26Vchf7efgYLe4dl5OQbBSUXShE= 64 + github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= 65 + github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= 66 + github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= 67 + github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8= 68 + github.com/gorilla/css v1.0.1/go.mod h1:BvnYkspnSzMmwRK+b8/xgNPLiIuNZr6vbZBTPQ2A3b0= 69 + github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= 70 + github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= 71 + github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= 72 + github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= 73 + github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= 74 + github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd h1:Coekwdh0v2wtGp9Gmz1Ze3eVRAWJMLokvN3QjdzCHLY= 75 + github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= 76 + github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= 77 + github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= 78 + github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= 79 + github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= 80 + github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= 81 + github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= 82 + github.com/lucasb-eyer/go-colorful v1.3.0 h1:2/yBRLdWBZKrf7gB40FoiKfAWYQ0lqNcbuQwVHXptag= 83 + github.com/lucasb-eyer/go-colorful v1.3.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= 84 + github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= 85 + github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= 86 + github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4= 87 + github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88= 88 + github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= 89 + github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= 90 + github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= 91 + github.com/microcosm-cc/bluemonday v1.0.27 h1:MpEUotklkwCSLeH+Qdx1VJgNqLlpY2KXwXFM08ygZfk= 92 + github.com/microcosm-cc/bluemonday v1.0.27/go.mod h1:jFi9vgW+H7c3V0lb6nR74Ib/DIB5OBs92Dimizgw2cA= 93 + github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= 94 + github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= 95 + github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 h1:ZK8zHtRHOkbHy6Mmr5D264iyp3TiX5OmNcI5cIARiQI= 96 + github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6/go.mod h1:CJlz5H+gyd6CUWT45Oy4q24RdLyn7Md9Vj2/ldJBSIo= 97 + github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA= 98 + github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo= 99 + github.com/muesli/mango v0.1.0 h1:DZQK45d2gGbql1arsYA4vfg4d7I9Hfx5rX/GCmzsAvI= 100 + github.com/muesli/mango v0.1.0/go.mod h1:5XFpbC8jY5UUv89YQciiXNlbi+iJgt29VDC5xbzrLL4= 101 + github.com/muesli/mango-cobra v1.2.0 h1:DQvjzAM0PMZr85Iv9LIMaYISpTOliMEg+uMFtNbYvWg= 102 + github.com/muesli/mango-cobra v1.2.0/go.mod h1:vMJL54QytZAJhCT13LPVDfkvCUJ5/4jNUKF/8NC2UjA= 103 + github.com/muesli/mango-pflag v0.1.0 h1:UADqbYgpUyRoBja3g6LUL+3LErjpsOwaC9ywvBWe7Sg= 104 + github.com/muesli/mango-pflag v0.1.0/go.mod h1:YEQomTxaCUp8PrbhFh10UfbhbQrM/xJ4i2PB8VTLLW0= 105 + github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s= 106 + github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8= 107 + github.com/muesli/roff v0.1.0 h1:YD0lalCotmYuF5HhZliKWlIx7IEhiXeSfq7hNjFqGF8= 108 + github.com/muesli/roff v0.1.0/go.mod h1:pjAHQM9hdUUwm/krAfrLGgJkXJ+YuhtsfZ42kieB2Ig= 109 + github.com/muesli/termenv v0.16.0 h1:S5AlUN9dENB57rsbnkPyfdGuWIlkmzJjbFf0Tf5FWUc= 110 + github.com/muesli/termenv v0.16.0/go.mod h1:ZRfOIKPFDYQoDFF4Olj7/QJbW60Ol/kL1pU3VfY/Cnk= 111 + github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo= 112 + github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= 113 + github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 114 + github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= 115 + github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= 116 + github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= 117 + github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= 118 + github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= 119 + github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= 120 + github.com/sergi/go-diff v1.4.0 h1:n/SP9D5ad1fORl+llWyN+D6qoUETXNZARKjyY2/KVCw= 121 + github.com/sergi/go-diff v1.4.0/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= 122 + github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo= 123 + github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0= 124 + github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o= 125 + github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= 126 + github.com/src-d/gcfg v1.4.0 h1:xXbNR5AlLSA315x2UO+fTSSAXCDf+Ar38/6oyGbDKQ4= 127 + github.com/src-d/gcfg v1.4.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI= 128 + github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 129 + github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= 130 + github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= 131 + github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= 132 + github.com/xanzy/ssh-agent v0.2.1 h1:TCbipTQL2JiiCprBWx9frJ2eJlCYT00NmctrHxVAr70= 133 + github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4= 134 + github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no= 135 + github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= 136 + github.com/yuin/goldmark v1.7.1/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E= 137 + github.com/yuin/goldmark v1.7.8 h1:iERMLn0/QJeHFhxSt3p6PeN9mGnvIKSpG9YYorDMnic= 138 + github.com/yuin/goldmark v1.7.8/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E= 139 + github.com/yuin/goldmark-emoji v1.0.5 h1:EMVWyCGPlXJfUXBXpuMu+ii3TIaxbVBnEX9uaDC4cIk= 140 + github.com/yuin/goldmark-emoji v1.0.5/go.mod h1:tTkZEbwu5wkPmgTcitqddVxY9osFZiavD+r4AzQrh1U= 141 + golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= 142 + golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= 143 + golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= 144 + golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= 145 + golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= 146 + golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI= 147 + golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo= 148 + golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= 149 + golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 150 + golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 151 + golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I= 152 + golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= 153 + golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 154 + golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug= 155 + golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= 156 + golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 157 + golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 158 + golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 159 + golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 160 + golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 161 + golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 162 + golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= 163 + golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 164 + golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= 165 + golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= 166 + golang.org/x/term v0.31.0 h1:erwDkOK1Msy6offm1mOgvspSkslFnIGsFnxOKoufg3o= 167 + golang.org/x/term v0.31.0/go.mod h1:R4BeIy7D95HzImkxGkTW1UQTtP54tio2RyHz7PwK0aw= 168 + golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 169 + golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= 170 + golang.org/x/text v0.3.8 h1:nAL+RVCQ9uMn3vJZbV+MRnydTJFPf8qqY42YiA6MrqY= 171 + golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= 172 + golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0= 173 + golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU= 174 + golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 175 + golang.org/x/tools v0.0.0-20190729092621-ff9f1409240a/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= 176 + gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 177 + gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 178 + gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 179 + gopkg.in/src-d/go-billy.v4 v4.3.2 h1:0SQA1pRztfTFx2miS8sA97XvooFeNOmvUenF4o0EcVg= 180 + gopkg.in/src-d/go-billy.v4 v4.3.2/go.mod h1:nDjArDMp+XMs1aFAESLRjfGSgfvoYN0hDfzEk0GjC98= 181 + gopkg.in/src-d/go-git-fixtures.v3 v3.5.0/go.mod h1:dLBcvytrw/TYZsNTWCnkNF2DSIlzWYqTe3rJR56Ac7g= 182 + gopkg.in/src-d/go-git.v4 v4.13.1 h1:SRtFyV8Kxc0UP7aCHcijOMQGPxHSmMOPrzulQWolkYE= 183 + gopkg.in/src-d/go-git.v4 v4.13.1/go.mod h1:nx5NYcxdKxq5fpltdHnPa2Exj4Sx0EclMWZQbYDu2z8= 184 + gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= 185 + gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= 186 + gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 187 + gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= 188 + gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=