Skip to content

Releases

Pablitus Prompt Framework (PPF)

Choose a tag to compare

@Pablitus666 Pablitus666 released this 28 Oct 20:48

🚀 Pablitus Prompt Framework (PPF) v1.5.1 — Prompt modular para PowerShell

Lanzamiento estable — Bootstrap rápido, temas PowerLine, núcleo .NET opt-in, Fase 3C (transient, tooltips, right prompt), Fase 3D (multi-shell, packaging) y Fase 3E (soporte completo para segmentos de Oh My Posh).

Esta versión consolida Pablitus Prompt Framework (PPF) como un framework modular para construir prompts de PowerShell con una arquitectura clara, rápida y personalizable. PPF separa la recolección de datos, la construcción del contexto, el middleware, los segmentos, los temas y el renderizado en capas independientes.

El resultado es un prompt propio, comprensible y extensible, sin depender de servicios externos ni de una configuración opaca.


🔧 Innovaciones técnicas en v1.5.1

  • Bootstrap rápido: las fuentes modulares se leen en orden de dependencia, se concatenan y se ejecutan una sola vez. El modo activo se expone en $global:PPF_BootstrapMode (Fast o Modular).
  • Cargador modular de compatibilidad: se puede forzar con $env:PPF_USE_MODULAR_LOADER = "1" para cobertura con Pester o depuración archivo por archivo.
  • Omisión de proveedores ocultos: $global:PPF_SkipHiddenProviders = $true evita ejecutar proveedores cuyos segmentos están ocultos por el tema activo.
  • 13 proveedores integrados: Session, WSL, Path, Project, Git, Docker, Python, Node, DotNet, Kubernetes, Battery, CPU y Memory.
  • 14 segmentos visuales: Session, Project, Path, Git, Python, Node, Docker, WSL, Battery, CPU, Memory, Kubernetes, DotNet y Time.
  • 8 renderers: Plain, Minimal, JSON, ANSI, PowerLine, Markdown, HTML y Rich.
  • 12 temas integrados: Default, Nord, Dracula, Catppuccin, Kali, Pablitus, Pablitus Dark, Pablitus Light, Pablitus Neon, Pablitus Matrix, Pablitus Ocean y Pablitus Sunset.
  • PowerLine truecolor: bloques con fondos de 24 bits, separadores triangulares y diamantes de apertura/cierre para Dracula, Nord, Catppuccin y Kali.
  • Temas personalizados: Import-PromptTheme permite importar archivos o directorios completos sin modificar el repositorio.
  • Segmento Time con reloj: el segmento usa el glifo de reloj de Nerd Font (U+F017).
  • Caché en memoria y disco: reutilización de información con TTL y persistencia opcional.
  • Configuración flexible: importación/exportación JSON y PSD1, además de recarga en caliente.
  • Sistema de eventos: hooks para BeforeRender, AfterRender, ThemeChanged, ConfigurationChanged y ModuleLoaded.
  • Sampler de CPU: recolección en segundo plano respaldado por runspaces.
  • Git watcher: seguimiento del estado del repositorio sin bloquear el prompt.
  • Diagnóstico y benchmarks: Get-PromptHealth, Test-PromptFramework, Measure-Prompt, Measure-PromptDetailed y Measure-PromptCacheComparison.
  • Multiplataforma: Windows, Linux y macOS con PowerShell 7+.
  • Calidad: suite de Pester, pruebas de resiliencia, smoke tests Fast/Modular y PSScriptAnalyzer.

🆕 Fase 3C — Prompt transitorio, tooltips y right prompt

  • Right prompt: bloque type: "rprompt" alineado a la derecha del prompt principal. Soporta filler (texto repetido entre bloques) y overflow (hide u break). Se compone con el prompt principal cuando se conoce el ancho de terminal (TerminalWidth).
  • Prompt transitorio: template.transientPrompt define el prompt que se muestra tras aceptar un comando. Soporta template, right_template, filler, newline, foreground y background. Se expone con Get-PromptString -Transient.
  • Tooltips: tooltips define segmentos right-aligned que se muestran al escribir palabras clave (tips). tooltips_action controla si reemplazan (replace, predeterminado), extienden (extend) o anteponen (prepend) el right prompt actual. Se expone con Get-PromptTooltip -Command <cmd>.
  • Núcleo .NET: PromptEngine.RenderTransient() y PromptEngine.RenderTooltipAsync() renderizan estas funcionalidades de forma determinista y testeable.
  • CLI: ppf render --transient, ppf render --tooltip <comando>, ppf render --terminal-width <n>.

Ejemplos rápidos

# Habilitar el núcleo .NET (requerido para Fase 3C)
$env:PPF_USE_DOTNET_CORE = "1"
Import-Module PablitusPrompt -Force

# Right prompt: se combina con el prompt principal usando TerminalWidth
Get-PromptString -TerminalWidth 80

# Prompt transitorio: se muestra tras aceptar un comando
Get-PromptString -Transient -TerminalWidth 80

# Tooltip activado por la palabra clave "git", alineado a derecha desde la columna 5
Get-PromptTooltip -Command "git" -TerminalWidth 80 -Column 5

tooltipsAction controla cómo se combina el tooltip con el right prompt actual: replace (predeterminado, reemplaza), extend (añade al final) o prepend (antepone al inicio).


🆕 Fase 3D — Multi-shell y packaging

  • Empaquetado para PowerShell Gallery: el módulo se distribuye como .nupkg además del ZIP tradicional. Generado con build.ps1.
  • Instalación desde PowerShell Gallery: Install-Module -Name PablitusPrompt -Scope CurrentUser.
  • Multi-shell: scripts de inicialización en src/ShellInit/ para usar PPF desde bash, zsh, fish y cmd invocando a pwsh:
    • ppf.bash — source en ~/.bashrc
    • ppf.zsh — source en ~/.zshrc
    • ppf.fish — source en ~/.config/fish/config.fish
    • ppf.cmd — macro o AutoRun en cmd
  • CI: validación del .nuspec, ejecución de build.ps1, subida de artefactos .nupkg y .zip.

🆕 Fase 3E — Soporte completo para segmentos de Oh My Posh

  • 40 proveedores de segmento .NET nuevos para compatibilidad total con temas de Oh My Posh:
    • Cloud: aws, az, azure, azd, az_functions, gcp, firebase
    • Sistema: battery, cmd_duration
    • Contenedores: docker, docker_context
    • .NET: dotnet
    • Git: gitcommit, gitversion
    • Go: go, golang
    • Kubernetes: helm, kubernetes, kubectl
    • JavaScript/TypeScript: node, npm, npx, pnpm, yarn, bun, deno
    • Python: python
    • Terraform: terraform, terraform_required_version
    • Build tools: gradle, mvn, mvnw
    • Ruby/Rust/Cargo: ruby, rust, cargo
    • PHP: php, composer
    • Swift/Kotlin/Scala: swift, kotlin, scala
  • Total: 46 tipos de segmento soportados (6 built-in + 40 de Oh My Posh).
  • Nerd Font automática: el instalador (Instalar-PPF.ps1) descarga e instala JetBrainsMono Nerd Font automáticamente desde el release de GitHub (licencia SIL OFL, distribución libre permitida), eliminando la dependencia de terceros.

Importar temas de Oh My Posh

Import-Module PablitusPrompt -Force
$env:PPF_USE_DOTNET_CORE = "1"
Import-PPFDotNetTheme -Path "ruta\al\tema.omp.json" -Activate -IgnoreUnsupported
Get-PromptString -TerminalWidth 120 -NoColor

🆕 Instalador mejorado (Instalar-PPF.ps1)

  • Copia src/ completo al módulo de PowerShell
  • Copia el núcleo .NET compilado (DLL, PDB, deps.json) a dotnet/publish/
  • Descarga e instala JetBrainsMono Nerd Font automáticamente (fuente primaria: release de GitHub, respaldo: nerd-fonts oficial)
  • Lista los temas disponibles al finalizar

🚀 Guía de instalación

📦 Requisitos

  • PowerShell 7.0 o superior.
  • Windows, Linux o macOS.
  • El instalador descarga e instala JetBrainsMono Nerd Font automáticamente.
  • Git, Node, Python, Docker o Kubernetes son opcionales; sus segmentos se degradan si no están disponibles.

⚡ Importar el módulo

git clone https://github.com/Pablitus666/PablitusPrompt.git
.\Instalar-PPF.ps1
Import-Module PablitusPrompt -Force

También se puede usar el bootstrap:

. .\PablitusPrompt\src\Bootstrap.ps1

🎨 Configurar el prompt

Agrega un bloque como este a tu $PROFILE y ajusta la ruta:

$PPF = "D:\PablitusPrompt\src"

if (Test-Path (Join-Path $PPF "Bootstrap.ps1")) {
    try {
        . (Join-Path $PPF "Bootstrap.ps1")

        $env:PPF_USE_DOTNET_CORE = "1"
        Set-PromptTheme -Name "Pablitus Minimal"
        $global:PPF_SkipHiddenProviders = $true

        function global:prompt {
            try {
                $context = Invoke-Prompt
                Get-PromptString -Context $context -Renderer "PowerLine"
            }
            catch {
                "PS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) "
            }
        }
    }
    catch {
        Write-Warning "[PPF] No se pudo cargar el prompt: $_"
    }
}

El try/catch evita que un fallo de un proveedor o renderer deje la consola sin prompt.

🧩 Cambiar de tema

Set-PromptTheme -Name "Dracula"
Set-PromptTheme -Name "Nord"
Set-PromptTheme -Name "Catppuccin"
Set-PromptTheme -Name "Kali"
Set-PromptTheme -Name "Default"
Set-PromptTheme -Name "Pablitus"
Set-PromptTheme -Name "Pablitus Dark"
Set-PromptTheme -Name "Pablitus Light"
Set-PromptTheme -Name "Pablitus Neon"
Set-PromptTheme -Name "Pablitus Matrix"
Set-PromptTheme -Name "Pablitus Ocean"
Set-PromptTheme -Name "Pablitus Sunset"
Set-PromptTheme -Name "Pablitus Forest"
Set-PromptTheme -Name "Pablitus Cyberpunk"

🛠️ Temas personalizados

Import-PromptTheme -Path "$HOME\Documents\PowerShell\Themes\MyTheme.Theme.ps1"
Set-PromptTheme -Name "MyTheme"

También se puede importar un directorio completo:

Import-PromptTheme -Path "$HOME\Documents\PowerShell\Themes"

El contrato completo está documentado en docs/Themes.md y hay un ejemplo en examples/Themes/Sunset.Theme.ps1.


✨ Especificaciones de software

  • Plataforma: Windows, Linux y macOS.
  • Motor: PowerShell 7+.
  • Arquitectura: modular, con capas para Core, Configuration, Utils, Modules, Themes y Renderers.
    -...
Read more