Version Visualization
Setup: See /installation for one-time SDK/CLI/MCP install.
Layers: SDK (Go) → CLI (shell) → MCP (AI tools) — pick your entry point.
When to Use
- Displaying version structure as an ASCII tree for inspection
- Visualizing how versions are grouped and nested
- Generating a summary view showing only group-level information
- Debugging version collections or presenting version info in terminal output
Decision Tree
Need to show individual versions in a tree?
→ Use VisualizeVersions / version_visualize (without --groups)
Collection has many versions and you need a high-level overview?
→ Use VisualizeVersionGroups / version_visualize with groups_only=true
Need to write output to a buffer or file instead of stdout?
→ Use SDK with io.Writer (bytes.Buffer, os.File)
Reading versions from a file?
→ Use --from-file flag (CLI) or ReadVersionsFromFile (SDK) first
Task Patterns
Render a detailed version tree
Goal: Show all versions grouped by major version with individual entries.
| Layer |
Approach |
| SDK |
versions.VisualizeVersions(versionList, os.Stdout, 0) — 0 = no truncation |
| CLI |
versions visualize 1.0.0 1.0.1 1.1.0 2.0.0 2.0.1 |
| MCP |
{"tool": "version_visualize", "arguments": {"versions": ["1.0.0", "1.0.1", "1.1.0", "2.0.0", "2.0.1"], "max_items_per_group": 0}} |
Render a group-level summary only
Goal: Show only the group hierarchy without individual version entries.
| Layer |
Approach |
| SDK |
versions.VisualizeVersionGroups(versionList, os.Stdout) |
| CLI |
versions visualize --groups 1.0.0 1.0.1 1.1.0 2.0.0 |
| MCP |
{"tool": "version_visualize", "arguments": {"versions": ["1.0.0", "1.0.1", "1.1.0", "2.0.0"], "groups_only": true}} |
Visualize with truncation per group
Goal: Limit the number of versions shown per group to avoid overwhelming output.
| Layer |
Approach |
| SDK |
versions.VisualizeVersions(versionList, os.Stdout, 3) — max 3 per group |
| CLI |
versions visualize --max-items 3 1.0.0 1.0.1 1.1.0 2.0.0 2.0.1 2.1.0 |
| MCP |
{"tool": "version_visualize", "arguments": {"versions": [...], "max_items_per_group": 3}} |
Write visualization to a buffer
Goal: Capture the tree output as a string for further processing.
| Layer |
Approach |
| SDK |
var buf bytes.Buffer; versions.VisualizeVersions(versionList, &buf, 0); output := buf.String() |
| CLI |
versions visualize 1.0.0 1.1.0 2.0.0 > tree.txt |
| MCP |
Response includes visualization (string) and total_versions / total_groups counts |
Read versions from a file and visualize
Goal: Load versions from a text file and render the tree.
| Layer |
Approach |
| SDK |
versionList, _ := versions.ReadVersionsFromFile("versions.txt"); versions.VisualizeVersions(versionList, os.Stdout, 0) |
| CLI |
versions visualize --from-file versions.txt |
| MCP |
Read with version_read_file first, then pass result to version_visualize |
API Reference
SDK Functions
// Detailed tree: individual versions grouped by major version
func VisualizeVersions(versions []*Version, w io.Writer, maxItems int)
// Summary tree: group-level hierarchy only (no individual versions)
func VisualizeVersionGroups(versions []*Version, w io.Writer)
maxItems = 0 means show all versions per group (no truncation)
- Both functions accept any
io.Writer — os.Stdout, bytes.Buffer, or os.File
- Release time is only shown when
PublicTime is non-zero
- Output uses Unicode box-drawing characters (├──, └──, ┌─)
- Labels are in Chinese: "版本总数" (total), "版本组" (group), "发布时间" (release time)
Output structure for VisualizeVersions:
版本总数: 8
版本组数: 2
┌─ 版本组: 1 (3个版本)
├── 1.0.0 (发布时间: 2024-01-01)
├── 1.0.1 (发布时间: 2024-02-01)
└── ...还有1个版本未显示
Output structure for VisualizeVersionGroups:
版本总数: 8
版本组数: 5
├─ 1 (3个版本组, 共3个版本)
│ ├─ 1.0 (1个版本)
│ └─ 1.1 (2个版本)
└─ 2 (3个版本组, 共3个版本)
CLI Commands
versions visualize [versions...] # render tree from positional args
versions visualize --max-items <n> [v...] # truncate to n per group
versions visualize --groups [v...] # group-level summary only
versions visualize --from-file <path> # read versions from file
versions visualize --groups --from-file <path> # combine flags
MCP Tools
| Tool |
Arguments |
Returns |
version_visualize |
versions ([]string), max_items_per_group? (int, default 0), groups_only? (bool, default false) |
visualization (string), total_versions (int), total_groups (int) |
Cross-References
- [[version-file-operations]] — read version lists from files before visualizing
- [[version-grouping]] — Group() is what powers the tree structure
- [[version-sorting]] — sort versions before visualization for predictable output
Important Notes
- Output uses Unicode box-drawing characters (├──, └──, ┌─) — ensure terminal supports UTF-8.
- Release time is only shown when
PublicTime is non-zero (set it before calling VisualizeVersions).
- maxItems = 0 means show all versions per group with no truncation.
- Output labels are in Chinese ("版本总数" = total versions, "版本组" = version group, "发布时间" = release time).
- Both SDK functions accept any
io.Writer — use os.Stdout, bytes.Buffer, or os.File.
- MCP response includes both
visualization (the tree string) and total_versions / total_groups counts.
1---2name: version-visualization3description: Render version hierarchies as text trees for debugging, inspection, or reporting.4---56# Version Visualization78> **Setup:** See `/installation` for one-time SDK/CLI/MCP install. 9> **Layers:** SDK (Go) → CLI (shell) → MCP (AI tools) — pick your entry point.1011## When to Use1213- Displaying version structure as an ASCII tree for inspection14- Visualizing how versions are grouped and nested15- Generating a summary view showing only group-level information16- Debugging version collections or presenting version info in terminal output1718## Decision Tree1920```21Need to show individual versions in a tree?22 → Use VisualizeVersions / version_visualize (without --groups)23Collection has many versions and you need a high-level overview?24 → Use VisualizeVersionGroups / version_visualize with groups_only=true25Need to write output to a buffer or file instead of stdout?26 → Use SDK with io.Writer (bytes.Buffer, os.File)27Reading versions from a file?28 → Use --from-file flag (CLI) or ReadVersionsFromFile (SDK) first29```3031## Task Patterns3233### Render a detailed version tree3435**Goal:** Show all versions grouped by major version with individual entries.3637| Layer | Approach |38|-------|----------|39| SDK | `versions.VisualizeVersions(versionList, os.Stdout, 0)` — 0 = no truncation |40| CLI | `versions visualize 1.0.0 1.0.1 1.1.0 2.0.0 2.0.1` |41| MCP | `{"tool": "version_visualize", "arguments": {"versions": ["1.0.0", "1.0.1", "1.1.0", "2.0.0", "2.0.1"], "max_items_per_group": 0}}` |4243### Render a group-level summary only4445**Goal:** Show only the group hierarchy without individual version entries.4647| Layer | Approach |48|-------|----------|49| SDK | `versions.VisualizeVersionGroups(versionList, os.Stdout)` |50| CLI | `versions visualize --groups 1.0.0 1.0.1 1.1.0 2.0.0` |51| MCP | `{"tool": "version_visualize", "arguments": {"versions": ["1.0.0", "1.0.1", "1.1.0", "2.0.0"], "groups_only": true}}` |5253### Visualize with truncation per group5455**Goal:** Limit the number of versions shown per group to avoid overwhelming output.5657| Layer | Approach |58|-------|----------|59| SDK | `versions.VisualizeVersions(versionList, os.Stdout, 3)` — max 3 per group |60| CLI | `versions visualize --max-items 3 1.0.0 1.0.1 1.1.0 2.0.0 2.0.1 2.1.0` |61| MCP | `{"tool": "version_visualize", "arguments": {"versions": [...], "max_items_per_group": 3}}` |6263### Write visualization to a buffer6465**Goal:** Capture the tree output as a string for further processing.6667| Layer | Approach |68|-------|----------|69| SDK | `var buf bytes.Buffer; versions.VisualizeVersions(versionList, &buf, 0); output := buf.String()` |70| CLI | `versions visualize 1.0.0 1.1.0 2.0.0 > tree.txt` |71| MCP | Response includes `visualization` (string) and `total_versions` / `total_groups` counts |7273### Read versions from a file and visualize7475**Goal:** Load versions from a text file and render the tree.7677| Layer | Approach |78|-------|----------|79| SDK | `versionList, _ := versions.ReadVersionsFromFile("versions.txt"); versions.VisualizeVersions(versionList, os.Stdout, 0)` |80| CLI | `versions visualize --from-file versions.txt` |81| MCP | Read with `version_read_file` first, then pass result to `version_visualize` |8283## API Reference8485### SDK Functions8687```go88// Detailed tree: individual versions grouped by major version89func VisualizeVersions(versions []*Version, w io.Writer, maxItems int)9091// Summary tree: group-level hierarchy only (no individual versions)92func VisualizeVersionGroups(versions []*Version, w io.Writer)93```9495- `maxItems = 0` means show all versions per group (no truncation)96- Both functions accept any `io.Writer` — `os.Stdout`, `bytes.Buffer`, or `os.File`97- Release time is only shown when `PublicTime` is non-zero98- Output uses Unicode box-drawing characters (├──, └──, ┌─)99- Labels are in Chinese: "版本总数" (total), "版本组" (group), "发布时间" (release time)100101Output structure for `VisualizeVersions`:102```103版本总数: 8104版本组数: 2105106┌─ 版本组: 1 (3个版本)107├── 1.0.0 (发布时间: 2024-01-01)108├── 1.0.1 (发布时间: 2024-02-01)109└── ...还有1个版本未显示110```111112Output structure for `VisualizeVersionGroups`:113```114版本总数: 8115版本组数: 5116117├─ 1 (3个版本组, 共3个版本)118│ ├─ 1.0 (1个版本)119│ └─ 1.1 (2个版本)120└─ 2 (3个版本组, 共3个版本)121```122123### CLI Commands124125```bash126versions visualize [versions...] # render tree from positional args127versions visualize --max-items <n> [v...] # truncate to n per group128versions visualize --groups [v...] # group-level summary only129versions visualize --from-file <path> # read versions from file130versions visualize --groups --from-file <path> # combine flags131```132133### MCP Tools134135| Tool | Arguments | Returns |136|------|-----------|---------|137| `version_visualize` | `versions` ([]string), `max_items_per_group?` (int, default 0), `groups_only?` (bool, default false) | `visualization` (string), `total_versions` (int), `total_groups` (int) |138139## Cross-References140141- [[version-file-operations]] — read version lists from files before visualizing142- [[version-grouping]] — Group() is what powers the tree structure143- [[version-sorting]] — sort versions before visualization for predictable output144145## Important Notes146147- **Output uses Unicode box-drawing** characters (├──, └──, ┌─) — ensure terminal supports UTF-8.148- **Release time is only shown** when `PublicTime` is non-zero (set it before calling VisualizeVersions).149- **maxItems = 0 means show all** versions per group with no truncation.150- **Output labels are in Chinese** ("版本总数" = total versions, "版本组" = version group, "发布时间" = release time).151- **Both SDK functions accept any `io.Writer`** — use `os.Stdout`, `bytes.Buffer`, or `os.File`.152- **MCP response** includes both `visualization` (the tree string) and `total_versions` / `total_groups` counts.