TypeDialog/docs/project-definition.md
2025-12-18 01:10:29 +00:00

17 KiB

Project Definition - typedialog

Version: 0.1.0 Date: 2025-12-17 Status: Production-ready, pre-publicación


Resumen Ejecutivo

Nombre Actual: typedialog v0.1.0 Categoría: Interactive Configuration Management System Estado: Production-ready, pre-publicación Arquitectura: Multi-backend Rust workspace (4 crates)

Propósito Central: Facilitar la gestión de configuración para aplicaciones, proyectos y scripts mediante inputs interactivos (prompts individuales o forms completos), con integración bidireccional a Nickel para settings tipados y validados.

Diferenciador Único: Único sistema en el mercado que integra Nickel schemas → Interactive collection → Multi-format output (YAML/JSON/TOML) con preservación de type contracts.


1. Identidad del Proyecto

1.1 Estado Actual

  • Nombre: typedialog
  • Origen: Extraído de nu_plugin_inquire (plugin de Nushell)
  • Etimología: "form" + "inquire" (referencia al crate inquire)
  • Versión: 0.1.0
  • Madurez: Production-ready, 80+ tests passing, documentación completa
  • Publicación: No publicado en crates.io aún

1.2 Evolución Histórica

nu_plugin_inquire (Nushell plugin)
    ↓
typedialog (standalone library extraction)
    ↓
+ CLI backend (inquire-based)
    ↓
+ Nickel integration (bidirectional)
    ↓
+ TUI backend (ratatui)
    ↓
+ Web backend (axum + HTMX)
    ↓
Current: Multi-backend configuration management system

Puntos de Inflexión:

  1. Separación de Nushell → biblioteca standalone
  2. Adición Nickel integration → type-safe configuration focus
  3. Múltiples backends → multi-context positioning

1.3 Descripción Técnica Precisa

Definición Formal: Sistema de gestión de configuración interactiva que facilita la recolección, validación y transformación de settings mediante diálogo con el usuario, actuando como puente entre Nickel schemas tipados y formatos de configuración estándar (YAML/JSON/TOML), soportando múltiples interfaces (CLI/TUI/Web) para adaptarse a diferentes contextos de uso.

Componentes Core:

  • Form/Prompt engine con 8 tipos de inputs
  • Nickel parser y code generator (bidirectional)
  • Backend abstraction layer (trait-based)
  • Template engine (Tera para metaprogramming)
  • i18n system (Fluent con en-US, es-ES)
  • Multi-format serialization (JSON/YAML/TOML/Nickel)

2. Propósito y Problema que Resuelve

2.1 Problema Space Completo

Problema Principal: La configuración de aplicaciones, proyectos y scripts requiere:

  1. Recolección interactiva de datos del usuario
  2. Validación tipada de inputs
  3. Transformación entre formatos (schemas → forms → configs)
  4. Adaptación a diferentes contextos (CLI scripts, TUI setup, Web interfaces)
  5. Organización con componentes, templates, documentación

Problemas Secundarios:

  • Herramientas existentes limitadas a un solo backend (CLI-only o Web-only)
  • No hay integración con lenguajes de configuración tipados (Nickel, KCL)
  • Forms completos ineficientes para capturar un solo valor
  • Prompts individuales no escalables para setup complejos
  • Falta de preservación de type contracts entre transformaciones
  • Configuración manual propensa a errores de tipo

2.2 Solución Propuesta

Enfoque Único:

Nickel Schema (typed, validated, documented)
    ↓ [nickel-to-form]
TOML Form Definition (declarative, reusable)
    ↓ [interactive collection]
User Dialog (CLI/TUI/Web según contexto)
    ↓ [validation + transformation]
Validated Output (JSON/YAML/TOML/Nickel)
    ↓ [consumption]
Application/Script/System

Flexibilidad Clave:

  • Single Prompt: nickelconf prompt --type password "API Key" → captura un valor
  • Complete Form: nickelconf form setup.toml --backend tui → multi-field wizard
  • Nickel Workflow: Schema → Form → Config con type preservation

2.3 Casos de Uso Concretos

1. Application Settings

  • User: Developer configurando nueva app
  • Escenario: Primera instalación de app Rust, necesita DB credentials, API keys, feature flags
  • Solución: Nickel schema define settings → TUI form para setup inicial → config.yaml generado
  • Valor: Type-safety, validación, documentación incluida en schema

2. Script Inputs

  • User: DevOps engineer escribiendo Nushell script de deploy
  • Escenario: Script necesita environment, region, instance type
  • Solución: CLI prompts individuales integrados en script → validated JSON output
  • Valor: Inputs validados on-the-fly, integración natural con script flow

3. Project Configuration

  • User: Tech lead inicializando nuevo proyecto
  • Escenario: Proyecto necesita 20+ settings (CI/CD, testing, deployment, monitoring)
  • Solución: Nickel schema organizado con components → TUI complete form → project.toml
  • Valor: Configuración completa guiada, validación, defaults inteligentes

4. Web-Based Setup

  • User: SaaS admin configurando tenant
  • Escenario: Configuración de tenant via web interface
  • Solución: Same TOML form → Web backend → Settings guardados en DB
  • Valor: Mismo form definition, diferente contexto de uso

5. Infrastructure as Code

  • User: SRE provisionando recursos cloud
  • Escenario: Crear configuración Terraform/Nickel para nueva infra
  • Solución: Interactive prompts → Nickel output con contracts → Terraform consumption
  • Valor: Type-safe IaC generation, validation antes de apply

3. Arquitectura y Tecnología

3.1 Tech Stack Completo

Core Language: Rust 2021, MSRV 1.70+

Crate Structure (Workspace):

typedialog/
├── crates/
│   ├── typedialog-core/     # Core library + backend trait
│   │   ├── form engine (8 input types)
│   │   ├── FormBackend trait
│   │   ├── Nickel integration modules
│   │   ├── Template engine (Tera)
│   │   ├── i18n system (Fluent)
│   │   └── Serialization (serde ecosystem)
│   ├── typedialog/          # CLI binary
│   │   └── InquireBackend impl
│   ├── typedialog-tui/      # TUI binary
│   │   └── RatatuiBackend impl
│   └── typedialog-web/      # Web server binary
│       └── AxumBackend impl

Dependencies Clave:

  • inquire - Terminal prompts (CLI backend)
  • ratatui + crossterm - Terminal UI (TUI backend)
  • axum + tower - Web server (Web backend)
  • serde ecosystem - Serialization (JSON/YAML/TOML)
  • tera - Template engine (Jinja2-like)
  • fluent + fluent-bundle - i18n/localization
  • clap - CLI argument parsing
  • chrono - Date/time handling

Backend Pattern (Trait-based abstraction):

pub trait FormBackend {
    fn execute_field(&mut self, field: &FormField) -> Result<Value>;
    fn execute_form_complete(&mut self, form: &Form) -> Result<HashMap<String, Value>>;
}

// Implementations:
impl FormBackend for InquireBackend { ... }   // CLI
impl FormBackend for RatatuiBackend { ... }   // TUI
impl FormBackend for AxumBackend { ... }      // Web

3.2 Características Técnicas Distintivas

1. Nickel Integration (Bidirectional)

  • nickel-to-form: Parse Nickel schemas → Extract metadata → Generate TOML forms
  • form-to-nickel: Convert form results → Generate Nickel code with contracts
  • Contract Preservation: std.string.NonEmpty, std.number.between mantenidos
  • Component Support: Nickel imports, merging, templates soportados

2. Multi-Backend Architecture

  • Same Form Definition: Un TOML form funciona en CLI, TUI, Web
  • Identical Output: Todos los backends producen mismo JSON/YAML/TOML
  • Display Modes: FieldByField (step-by-step) o Complete (all at once)
  • Backend Selection: --backend cli|tui|web en runtime

3. Form Engine Features

  • 8 Input Types: text, confirm, select, multiselect, password, custom, editor, date
  • Conditional Logic: Fields con depends_on para flujo dinámico
  • Validation: Regex, length, range, custom validators
  • Defaults: Static, dynamic (desde otras respuestas), computed
  • Grouping: Semantic grouping para mejor UX

4. i18n System

  • Fluent-based: .ftl files para traducciones
  • Languages: en-US (default), es-ES
  • Scopes: Form UI, field labels, validation messages, help text
  • Fallback: Graceful degradation a inglés

5. Template System

  • Tera Engine: Jinja2-like syntax para metaprogramming
  • Nickel Templates: .ncl.j2 files para código generation
  • Variable Substitution: Form results inyectados en templates
  • Conditionals/Loops: Lógica de template para código complejo

3.3 Formatos Soportados

Input Formats:

  • TOML (form definitions)
  • Nickel (schemas para form generation)

Output Formats:

  • JSON (app configs, API consumption)
  • YAML (configs, Kubernetes, Ansible)
  • TOML (Rust configs, general settings)
  • Nickel (type-safe configs con contracts)
  • Plain text (simple key=value)

4. Análisis de Mercado y Posicionamiento

4.1 Target Audience Detallado

Audiencia Primaria:

  1. Application Developers (40%)

    • Stack: Rust, Go, Python apps
    • Need: Settings management con type-safety
    • Pain: Manual config files propensa a errores
    • Value: Nickel schemas + interactive collection + validated output
  2. Script Creators (30%)

    • Stack: Nushell, Bash, Python scripts
    • Need: Interactive inputs para scripts
    • Pain: Validación manual, error handling repetitivo
    • Value: Validated prompts con minimal code
  3. DevOps/SRE Engineers (20%)

    • Stack: Terraform, Kubernetes, Ansible
    • Need: Interactive IaC generation
    • Pain: Complex configs, no validation hasta runtime
    • Value: Type-safe config generation, Nickel contracts
  4. Project/Team Leads (10%)

    • Stack: Project setup, team onboarding
    • Need: Consistent project configuration
    • Pain: Manual setup guides, config drift
    • Value: Reproducible project setup con forms

Audiencia Secundaria:

  • CLI tool developers agregando interactive features
  • SaaS developers para user onboarding/config
  • System administrators para server setup wizards

4.2 Competitive Landscape

Categorías de Competidores:

  1. Terminal Prompt Libraries: inquire, dialoguer, questionary

    • Gap: Solo prompts, no forms. No type-safety. No multi-backend.
  2. Form Libraries: HTML forms, react-hook-form

    • Gap: Web-only. No CLI/TUI. No Nickel integration.
  3. Configuration Management: Ansible, Terraform

    • Gap: IaC-specific. No general-purpose forms. No type preservation.
  4. Schema Languages: JSON Schema, Nickel, KCL

    • Gap: Schema definition only, no interactive collection.

Competitive Matrix:

Feature typedialog inquire HTML forms Ansible Nickel
Interactive prompts ⚠️
Complete forms ⚠️
Multi-backend (3)
Type-safe schemas ⚠️
Bidirectional schema
Multi-format output (4) ⚠️ ⚠️ (1)
i18n support ⚠️
Template system
Declarative forms ⚠️ N/A

4.3 Value Propositions Completo

Para Developers:

  • Type-safe configuration desde día 1 (Nickel schemas)
  • Menos código de validación manual (schemas auto-validan)
  • Documentación incluida en schemas (contratos son docs)
  • Multi-format output (una fuente, múltiples consumidores)

Para DevOps/SRE:

  • Interactive IaC generation (menos errores de config)
  • Validación antes de apply (Nickel contracts)
  • Reproducible setup (TOML forms versionables)
  • Script integration (CLI prompts en pipelines)

Para Organizations:

  • Consistent configuration (same forms across projects)
  • Reduced onboarding time (guided setup wizards)
  • Auditability (form definitions + results traceable)
  • i18n support (international teams)

Unique Selling Points:

  1. Nickel Integration - Único en mercado
  2. Multi-Backend Flexibility - Mismo form, diferentes contextos
  3. Forms + Prompts - No forzado a elegir uno u otro
  4. Type-Safe Pipeline - Contracts preserved end-to-end
  5. Production-Ready - i18n, templates, validación, docs

5. Capacidades y Características

5.1 Functional Capabilities

Input Collection:

  • 8 tipos de prompts (text, password, select, multiselect, confirm, custom, editor, date)
  • Forms declarativos en TOML
  • Conditional logic (depends_on)
  • Dynamic defaults (computed fields)
  • Validation (regex, range, length, custom)
  • Help text y documentación inline

Backend Support:

  • CLI - inquire-based terminal prompts (stdin fallback)
  • TUI - ratatui full-screen interface (3-panel layout, Tab navigation)
  • Web - axum + HTMX browser forms (RESTful API)
  • Display modes: FieldByField, Complete

Nickel Workflow:

  • nickel-to-form: Schema → TOML form generation
  • form execution: Interactive collection
  • form-to-nickel: Results → Nickel code generation
  • Contract preservation: Type constraints maintained
  • Component support: Imports, merging, templates

Output Formats:

  • JSON (structured data, API consumption)
  • YAML (configs, k8s, ansible)
  • TOML (rust configs, settings)
  • Nickel (type-safe configs)
  • Text (simple key=value)

i18n & Templates:

  • Fluent-based localization (en-US, es-ES)
  • Tera template engine
  • Nickel template metaprogramming (.ncl.j2)
  • Variable substitution
  • Conditional rendering

5.2 Non-Functional Capabilities

Performance:

  • Fast compilation (Rust, release build <30s)
  • Low memory footprint (CLI <5MB, TUI <10MB)
  • Minimal startup time (<100ms)

Reliability:

  • 80+ passing tests (unit + integration)
  • Type-safe Rust (no runtime crashes)
  • Graceful error handling
  • Fallback behaviors (stdin, default values)

Usability:

  • Intuitive TOML form syntax
  • Clear error messages
  • Help text contextual
  • i18n for international users

Maintainability:

  • Modular workspace structure
  • Clean trait-based architecture
  • Comprehensive documentation
  • Example forms included

Portability:

  • Cross-platform (Linux, macOS, Windows)
  • Single binary distribution
  • No runtime dependencies
  • Docker support

7. Métricas y Success Criteria

7.1 Technical Metrics

Code Quality:

  • Test coverage > 80%
  • Zero clippy warnings (enforce)
  • Clean compilation all features
  • Documentation coverage > 90%

Performance:

  • Binary size < 15MB (release)
  • Startup time < 100ms
  • Memory usage < 20MB (TUI)
  • Form rendering < 50ms

7.2 Adoption Metrics

Community:

  • GitHub stars > 100 (first 6 months post-publish)
  • crates.io downloads > 1000/month
  • Active issues/PRs
  • Contributor growth

Usage:

  • Example forms created by users
  • Integration stories shared
  • Blog posts/tutorials written
  • Conference talks

7.3 Quality Metrics

Reliability:

  • Bug reports < 5/month
  • Critical bugs = 0
  • Response time < 48h
  • Fix time < 7 days (non-critical)

User Satisfaction:

  • Positive feedback ratio > 80%
  • Feature request alignment
  • Documentation clarity
  • Ease of use reports

8. Roadmap y Future Considerations

8.1 Immediate Focus (v0.1.x)

Naming Decision:

  • Decide: nickelconf vs nickeltalk vs keep typedialog
  • Execute: Rename if chosen
  • Update: All documentation and messaging

Stabilization:

  • Bug fixes from early users
  • Documentation improvements
  • Example forms expansion
  • Performance optimizations

8.2 Near-term Enhancements (v0.2.x)

Nickel Enhancements:

  • Deeper schema introspection
  • More contract types supported
  • Component template library
  • Schema validation improvements

Backend Improvements:

  • TUI navigation enhancements
  • Web backend styling/theming
  • CLI colored output options
  • Performance optimizations

New Features:

  • Form composition (reusable sections)
  • Field dependencies (advanced logic)
  • Custom validators library
  • Plugin system for custom fields

8.3 Long-term Vision

Ecosystem:

  • Form marketplace (shared forms)
  • IDE integrations (VSCode extension)
  • CI/CD integrations
  • Cloud service (hosted forms)

Technology:

  • KCL integration (like Nickel)
  • CUE language support
  • GraphQL schema support
  • Database schema integration

Beyond Configuration:

  • Survey/questionnaire system
  • User onboarding workflows
  • Admin panel generation
  • API client generation

Conclusión

typedialog es un proyecto maduro y bien posicionado que resuelve un problema real en la gestión de configuración. Su diferenciador único - la integración bidireccional con Nickel combinada con múltiples backends - lo posiciona de manera única en el mercado.

El próximo paso crítico es una decisión de naming estratégica que refuerce esta posición única y comunique claramente el valor propuesto al mercado target.