terminal

package
v0.6.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 12, 2026 License: Apache-2.0 Imports: 15 Imported by: 0

README

Bundle terminalowy srcpack

Ten katalog można skopiować w całości do innego projektu Go. Nie importuje pakietów srcpack, konfiguracji workspace, parsera ani CLI. Zawiera jednak obecną politykę wyświetlania srcpack — etykiety SRCPACK, legendę drzewa, progi kolorów i układ raportów. To osobny bundle na potrzeby produktu, a nie jeszcze ogólny moduł Terminal.

tree.nflow odpowiada za nagłówki, legendę, ikony ról, metadane, procenty, kolory, paski i stopkę drzewa. summary.nflow przygotowuje model widoku: kolejność i wartości pól, wartości domyślne, skracanie tekstu oraz dane opcjonalnych szacunków. Układ raportu znajduje się w sąsiednim summary.tmpl i jest renderowany przez istniejący renderer Flow template.render. Zmiany danych i reguł przygotowania wykonuje się w NFlow, a zmiany układu — w pliku .tmpl, nie w adapterach Go.

Go dostarcza jedynie ogólne prymitywy: terminal.printf, width, tokens, bytes, size, age, clean, paint, bar oraz dostęp do osadzonych plików .tmpl. Szablony są osadzone z tego samego katalogu co źródła NFlow. Kolory i progi wybiera NFlow. Bundle nie wykrywa TTY, nie odczytuje zegara ani plików hosta, nie zapisuje stdout/stderr i nie uruchamia animacji. Operacje systemowe pozostają u hosta.

Najprostsze użycie z Go

Skopiuj cały katalog, zmień import w aplikacji na własną ścieżkę i użyj Go 1.27.3 oraz Flow v0.64.0/kernel v0.36.0:

import (
    "context"
    "example.com/myapp/bundles/terminal"
)

text, err := terminal.Summary(context.Background(), map[string]any{
    "config": map[string]any{"profile": "arch", "editor": "markdown"},
    "stats": map[string]any{
        "file_count": 2, "func_count": 4,
        "raw_bytes": int64(4096), "packed_bytes": int64(1024),
        "estimated_tokens": int64(292), "saved_percent": 75.0,
    },
    "elapsed": "25ms", "color": false,
    "clipboard_requested": false, "tree": "",
})
// Host obsługuje err i sam decyduje, gdzie zapisać text.

terminal.Tree(ctx, input) działa analogicznie. Obie funkcje zwracają (string, error), używają źródeł osadzonych z tego katalogu i propagują błędy oraz anulowanie kontekstu. Konfiguracja runnera jest współdzielona bezpiecznie między wywołaniami; źródło jest wykonywane dla każdego przekazanego zestawu faktów.

Komponowanie w NFlow

Przy bezpośrednim uruchamianiu NFlow zamontuj terminal.Bundle(nil) i template.Bundle(nil) obok native.Bundles() oraz zainstaluj terminal.Loader() przez compiler.WithSourceLoader. terminal.Summary montuje renderer szablonów we własnym runnerze. W większej aplikacji skomponuj loadery; summary.tmpl jest odczytywany z osadzonych zasobów bundle, a @require terminal i @require template nie zastępują dołączenia źródła.

@include "summary.nflow"
@pipeline moj_raport
  @terminal_summary_format()
@end
pipeline.moj_raport

Dostępne makra to @terminal_summary_format() i @terminal_tree_format(), a gotowe pipeline’y to terminal_summary i terminal_tree. Makro podsumowania przygotowuje dane w NFlow i wywołuje zamontowaną akcję template.render; Flow macros mogą komponować akcje innych zamontowanych bibliotek, ale nie rejestrują ani nie montują bibliotek. Makra przyjmują pojedynczą wartość, nie strumień — przed nimi użyj collect, jeśli wejście jest strumieniowe. Wynikiem jest {content: string}. Przy ręcznym składaniu bundle trzeba zachować zarówno Libraries, jak i Symbols.

Kontrakt raportu

stats zawiera liczby file_count, func_count, raw_bytes, packed_bytes, estimated_tokens, saved_percent. Wartości config są opcjonalne: tekstowe profile, targets, prompt, editor, directory, output, bool cost oraz tablica pricing. Każdy element pricing ma label, currency i per_million_tokens (liczba jednostek danej waluty na milion szacowanych zaoszczędzonych tokenów). Pozostałe pola wejścia to teksty elapsed i tree oraz bool color i clipboard_requested.

Host dostarcza czas jako gotową etykietę. clipboard_requested oznacza żądanie użytkownika, a nie potwierdzenie późniejszego skopiowania. Nie znaleziono w projekcie rzeczywistego katalogu cen i bundle nie zawiera domyślnych nazw modeli ani stawek. Gdy cost jest włączone, raport pokazuje szacowaną liczbę zaoszczędzonych tokenów; kwoty pojawiają się wyłącznie dla stawek dostarczonych przez hosta w config.pricing i są oznaczone jako szacunki. Raport nie przedstawia dostarczonych stawek jako aktualnego katalogu.

Kontrakt drzewa

Host dostarcza:

  • empty, full, color: bool;
  • included, excluded, total_files, total_tokens, raw_bytes, packed_bytes: liczby całkowite;
  • languages: mapa nazwa języka → liczba plików;
  • rows: tablica widocznych wierszy, już uporządkowanych i ograniczonych głębokością przez hosta.

Każdy wiersz ma wszystkie poniższe pola:

map[string]any{
    "name": "src", "dir": true, "prefix": "", "connector": "└── ",
    "files": 1, "tokens": int64(100), "funcs": 2, "lang": "go",
    "fully_excluded": false, "role": "", "age": -1, "lines": 0,
    "paired": "", "excluded": false, "target": false,
}

age: -1 oznacza brak informacji o czasie; 0 oznacza dzisiaj. Role to test, config, doc, gen, entry albo pusty tekst. Pola agregatów dotyczą katalogów, a wiek, liczba linii, rola i parowanie — plików. Niepotrzebne pola nadal należy podać z wartościami zerowymi/pustymi. Formatowanie nie wykonuje ponownego spaceru po dysku.

Zgodność i ograniczenia

Domyślne tree-depth=1 nadal rozstrzyga srcpack, poza tym bundle. Zachowane są bajty dotychczasowego raportu i drzewa, z wyjątkiem wcześniej losowych remisów języków: kolejność i język dominujący są teraz rozstrzygane alfabetycznie. Pełne drzewo zachowuje także historyczną semantykę liczb w stopce; nie zmienia jej przy okazji migracji.

width zachowuje dotychczasową przybliżoną szerokość emoji i selektorów wariantu. Nie jest kompletnym algorytmem szerokości wszystkich grafemów Unicode. bar ogranicza procent do 0–100, szerokość do 0–4096 i używa █, ▓, ░. bytes stosuje jednostki KiB/MiB/GiB, a size historyczne etykiety KB/MB/GB/TB raportu. Tekst wejściowy pozostaje danymi — nie jest ponownie parsowany jako NFlow.

Istniejący progress w Flow pozostaje właścicielem raportowania postępu, obsługi TTY i cyklu życia spinnera. Ten etap go nie dubluje ani nie zmienia Flow/kernel. Dalsze dopracowanie wyglądu można wykonać tutaj, a do ogólnego Terminal przenieść dopiero sprawdzone, wspólne prymitywy.

Testy: go test ./bundles/terminal -count=1. Testy porównawcze srcpack znajdują się w operators/stage8_*_test.go i korzystają z wyników wygenerowanych niezależnie na Stage 7.

Documentation

Overview

Package terminal provides copyable, dependency-light terminal formatting primitives.

Index

Constants

View Source
const ID = "terminal"

Variables

Functions

func Bundle

func Bundle(_ map[string]string) compiler.Bundle

Bundle exposes the upstream renderer used by the terminal NFlow modules.

func ColorEnabled added in v0.6.0

func ColorEnabled(mode string, output *os.File) bool

ColorEnabled follows the CLI color policy for the supplied output stream.

func Loader

func Loader() compiler.SourceLoader

func RenderMarkdown added in v0.6.0

func RenderMarkdown(markdown string, color bool) string

RenderMarkdown presents the cookbook for a terminal while leaving raw Markdown output to callers that explicitly request it.

func Summary

func Summary(ctx context.Context, input map[string]any) (string, error)

Summary renders supplied facts without terminal detection, clocks or writes. The caller owns those effects and decides where to send the result.

func Tree

func Tree(ctx context.Context, input map[string]any) (string, error)

Tree renders flattened tree facts. Traversal, filtering, aggregation and discovery are supplied by the host; the bundle does not read files.

Types

This section is empty.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL