Documentation
¶
Overview ¶
Package output renders categorized toolkit data to stdout in machine-friendly formats (json / jsonl / yaml / csv / tsv) or a human table.
It is intentionally TUI-free: it depends only on stdlib + yaml so the headless `toolkit get` command can be used in scripts and from LLM agents without paying the Bubble Tea cost.
Index ¶
- func FlattenWithKey[T any](grouped map[string][]T, groupField string) []map[string]any
- func WriteDelimited(w io.Writer, headers []string, rows [][]string, opts Options, sep rune) error
- func WriteJSON(w io.Writer, items any, opts Options) error
- func WriteJSONL(w io.Writer, items any, _ Options) error
- func WriteTable(w io.Writer, headers []string, rows [][]string, opts Options) error
- func WriteYAML(w io.Writer, items any, opts Options) error
- type Format
- type Options
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func FlattenWithKey ¶
FlattenWithKey turns a map[string][]T into []map[string]any, injecting the map key into each element under groupField. Used to expose grouped loader data (e.g. GpuNodeMap, DedicatedAIClusterMap) as a uniform array of objects without leaking the underlying map shape to MCP / JSON consumers.
The output is stable: map keys are sorted before iteration. The implementation round-trips through JSON so the caller's struct tags (omitempty, custom names, etc.) are honored.
Collision rule: if T's JSON encoding already contains a field whose name equals groupField, the map key wins — the existing value is silently overwritten. Callers should choose a groupField that doesn't collide with any of T's tagged fields. The current production callers pick "pool" / "tenant" / "model", none of which clash with the underlying pkg/models types. Test coverage pins this behavior (TestFlattenWithKey_CollisionOverwrites).
func WriteDelimited ¶
WriteDelimited emits headers + rows as delimiter-separated values using encoding/csv, which handles quoting for fields containing the separator, double quotes, or newlines. Pass ',' for CSV or '\t' for TSV. opts.NoHeaders suppresses the header row.
func WriteJSON ¶
WriteJSON emits items as a single JSON value (typically an array). A nil items value emits "[]" so pipelines like `| jq '.[]'` never see a null document.
func WriteJSONL ¶
WriteJSONL emits one JSON object per line. items must be a slice (each element becomes a line) or any single JSON-encodable value (emitted as one line).
Grouped/map data should be flattened with FlattenWithKey before reaching this function — callers pick the group field name (`pool`, `tenant`, `model`, …) explicitly rather than relying on a magic key.
func WriteTable ¶
WriteTable emits a tab-aligned table. opts.NoHeaders suppresses the header row even when headers is non-empty.
Types ¶
type Format ¶
type Format string
Format is the on-the-wire encoding for `toolkit get`.
const ( FormatTable Format = "table" FormatJSON Format = "json" FormatJSONL Format = "jsonl" FormatYAML Format = "yaml" FormatCSV Format = "csv" FormatTSV Format = "tsv" )
Supported output formats for `toolkit get` and consumers that share the same encoding contract.
func ParseFormat ¶
ParseFormat returns the Format for s, or an error listing valid choices.