terminal

package
v0.2.1 Latest Latest
Warning

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

Go to latest
Published: Nov 8, 2026 License: Apache-2.0 Imports: 14 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

func Loader

func Loader() compiler.SourceLoader

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.

Jump to

Keyboard shortcuts

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